dependabot-common 0.390.0 → 0.391.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 +4 -4
- data/lib/dependabot/clients/azure.rb +1 -1
- data/lib/dependabot/command_helpers.rb +1 -1
- data/lib/dependabot/config/file_fetcher.rb +2 -2
- data/lib/dependabot/config/ignore_condition.rb +1 -1
- data/lib/dependabot/config/update_config.rb +1 -1
- data/lib/dependabot/dependency_group.rb +16 -0
- data/lib/dependabot/dependency_requirement.rb +53 -0
- data/lib/dependabot/ecosystem.rb +8 -8
- data/lib/dependabot/errors.rb +1 -1
- data/lib/dependabot/file_fetchers/base.rb +1 -1
- data/lib/dependabot/file_updaters/artifact_updater.rb +1 -1
- data/lib/dependabot/file_updaters/base.rb +2 -2
- data/lib/dependabot/metadata_finders/base/changelog_finder.rb +4 -7
- data/lib/dependabot/metadata_finders/base/changelog_pruner.rb +3 -3
- data/lib/dependabot/metadata_finders/base/commits_finder.rb +6 -5
- data/lib/dependabot/metadata_finders/base/release_finder.rb +24 -16
- data/lib/dependabot/metadata_finders/base.rb +1 -1
- data/lib/dependabot/package/package_details.rb +2 -2
- data/lib/dependabot/package/package_language.rb +3 -3
- data/lib/dependabot/package/package_latest_version_finder.rb +4 -3
- data/lib/dependabot/package/package_release.rb +11 -11
- data/lib/dependabot/pull_request_creator/branch_name_template.rb +3 -12
- data/lib/dependabot/pull_request_creator/branch_namer/solo_strategy.rb +18 -16
- data/lib/dependabot/pull_request_creator/labeler.rb +8 -15
- data/lib/dependabot/pull_request_creator/message_builder.rb +13 -13
- data/lib/dependabot/pull_request_creator/pr_name_prefixer.rb +10 -17
- data/lib/dependabot/pull_request_updater/github.rb +1 -1
- data/lib/dependabot/source.rb +1 -4
- data/lib/dependabot/update_checkers/base.rb +3 -3
- data/lib/dependabot/version.rb +2 -5
- data/lib/dependabot.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 17a33f7a58c72db0519e97a6cafbcc82635b05e63990cc99ce0bef74aab095a5
|
|
4
|
+
data.tar.gz: 1cc7c71d06814db8fd53594b566e4f3b52ca89ec2429d8c7d6ba9824097865e6
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: d6fca56d5653cdbe70271dec38e5d43d225fe637ddd22c33afd015da340502bac20a41b69d244943c6dc05a6ecfc3ad0cad61220c1abf7c33dbafb4ebbd387fe
|
|
7
|
+
data.tar.gz: 6de41d80907590ec688ef8e178a5efb1575af696a7a88e8cf1ec482b5763c8846c792a6f88c78e45a00f574a987f1d3df13755e370edebdf043c008204fe3918
|
|
@@ -35,7 +35,7 @@ module Dependabot
|
|
|
35
35
|
|
|
36
36
|
sig { params(process_status: T.nilable(Process::Status), custom_exitstatus: T.nilable(Integer)).void }
|
|
37
37
|
def initialize(process_status, custom_exitstatus = nil)
|
|
38
|
-
@process_status =
|
|
38
|
+
@process_status = process_status
|
|
39
39
|
@custom_exitstatus = custom_exitstatus
|
|
40
40
|
end
|
|
41
41
|
|
|
@@ -10,11 +10,11 @@ module Dependabot
|
|
|
10
10
|
class FileFetcher < FileFetchers::Base
|
|
11
11
|
extend T::Sig
|
|
12
12
|
|
|
13
|
-
CONFIG_FILE_PATHS =
|
|
13
|
+
CONFIG_FILE_PATHS = %w(.github/dependabot.yml .github/dependabot.yaml).freeze
|
|
14
14
|
|
|
15
15
|
sig { override.params(filenames: T::Array[String]).returns(T::Boolean) }
|
|
16
16
|
def self.required_files_in?(filenames)
|
|
17
|
-
CONFIG_FILE_PATHS.
|
|
17
|
+
CONFIG_FILE_PATHS.intersect?(filenames)
|
|
18
18
|
end
|
|
19
19
|
|
|
20
20
|
sig { override.returns(String) }
|
|
@@ -32,7 +32,7 @@ module Dependabot
|
|
|
32
32
|
).void
|
|
33
33
|
end
|
|
34
34
|
def initialize(dependency_name:, versions: nil, update_types: nil)
|
|
35
|
-
@dependency_name =
|
|
35
|
+
@dependency_name = dependency_name
|
|
36
36
|
@versions = T.let(versions || [], T::Array[String])
|
|
37
37
|
@update_types = T.let(update_types || [], T::Array[String])
|
|
38
38
|
end
|
|
@@ -52,7 +52,7 @@ module Dependabot
|
|
|
52
52
|
sig { params(dependency: Dependency).returns(Dependency) }
|
|
53
53
|
def extract_base_version_from_requirement(dependency)
|
|
54
54
|
requirements = dependency.requirements
|
|
55
|
-
requirement = T.must(requirements.first)
|
|
55
|
+
requirement = T.must(requirements.first).requirement_string
|
|
56
56
|
version = requirement&.match(/\d+\.\d+\.\d+/)&.to_s
|
|
57
57
|
Dependabot::Dependency.new(
|
|
58
58
|
name: dependency.name,
|
|
@@ -87,6 +87,22 @@ module Dependabot
|
|
|
87
87
|
}.to_yaml.delete_prefix("---\n")
|
|
88
88
|
end
|
|
89
89
|
|
|
90
|
+
sig { params(parent_name: String, dependency_name: String).returns(String) }
|
|
91
|
+
def self.subgroup_name(parent_name:, dependency_name:)
|
|
92
|
+
"#{parent_name}/#{dependency_name}"
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
sig do
|
|
96
|
+
params(subgroup_name: String, dependency_name: String)
|
|
97
|
+
.returns(T.nilable(String))
|
|
98
|
+
end
|
|
99
|
+
def self.parent_name_from_subgroup(subgroup_name:, dependency_name:)
|
|
100
|
+
suffix = "/#{dependency_name}"
|
|
101
|
+
return unless subgroup_name.end_with?(suffix)
|
|
102
|
+
|
|
103
|
+
subgroup_name.delete_suffix(suffix)
|
|
104
|
+
end
|
|
105
|
+
|
|
90
106
|
private
|
|
91
107
|
|
|
92
108
|
sig { params(dependency_name: String).returns(T::Boolean) }
|
|
@@ -153,8 +153,61 @@ module Dependabot
|
|
|
153
153
|
raise TypeError, "requirement must be a string or nil"
|
|
154
154
|
end
|
|
155
155
|
|
|
156
|
+
# Reads a known metadata field such as "property_name". Accepts either key
|
|
157
|
+
# style for the same reason as `source_string`. Returns nil when the
|
|
158
|
+
# requirement carries no metadata or the key is absent.
|
|
159
|
+
sig { params(key: String).returns(T.nilable(String)) }
|
|
160
|
+
def metadata_string(key)
|
|
161
|
+
value = metadata_value(key)
|
|
162
|
+
return if value.nil?
|
|
163
|
+
return value if value.is_a?(String)
|
|
164
|
+
|
|
165
|
+
raise TypeError, "metadata #{key} must be a string or nil"
|
|
166
|
+
end
|
|
167
|
+
|
|
168
|
+
# Reads a known symbol-valued metadata field such as Helm's "type".
|
|
169
|
+
sig { params(key: String).returns(T.nilable(Symbol)) }
|
|
170
|
+
def metadata_symbol(key)
|
|
171
|
+
value = metadata_value(key)
|
|
172
|
+
return if value.nil?
|
|
173
|
+
return value if value.is_a?(Symbol)
|
|
174
|
+
|
|
175
|
+
raise TypeError, "metadata #{key} must be a symbol or nil"
|
|
176
|
+
end
|
|
177
|
+
|
|
178
|
+
# Reads a nested metadata hash whose values are all strings, such as
|
|
179
|
+
# "dependency_set" (`{ group: "my.group", version: "1.4.0" }`). Keys are
|
|
180
|
+
# symbolised so callers can read them with symbols regardless of how the
|
|
181
|
+
# requirement was built.
|
|
182
|
+
sig { params(key: String).returns(T.nilable(T::Hash[Symbol, String])) }
|
|
183
|
+
def metadata_string_hash(key)
|
|
184
|
+
value = metadata_value(key)
|
|
185
|
+
return if value.nil?
|
|
186
|
+
raise TypeError, "metadata #{key} must be a hash of strings or nil" unless value.is_a?(Hash)
|
|
187
|
+
|
|
188
|
+
value.to_h do |raw_entry_key, raw_entry_value|
|
|
189
|
+
entry_key = T.cast(raw_entry_key, Object)
|
|
190
|
+
entry_value = T.cast(raw_entry_value, Object)
|
|
191
|
+
unless (entry_key.is_a?(Symbol) || entry_key.is_a?(String)) && entry_value.is_a?(String)
|
|
192
|
+
raise TypeError, "metadata #{key} must be a hash of strings or nil"
|
|
193
|
+
end
|
|
194
|
+
|
|
195
|
+
[entry_key.to_sym, entry_value]
|
|
196
|
+
end
|
|
197
|
+
end
|
|
198
|
+
|
|
156
199
|
private
|
|
157
200
|
|
|
201
|
+
# Reads a raw metadata field, accepting either key style. Nil when the
|
|
202
|
+
# requirement carries no metadata or the key is absent.
|
|
203
|
+
sig { params(key: String).returns(T.nilable(Object)) }
|
|
204
|
+
def metadata_value(key)
|
|
205
|
+
details = metadata
|
|
206
|
+
return if details.nil?
|
|
207
|
+
|
|
208
|
+
details[key.to_sym] || details[key]
|
|
209
|
+
end
|
|
210
|
+
|
|
158
211
|
sig { params(key: Symbol).returns(T.nilable(String)) }
|
|
159
212
|
def optional_string(key)
|
|
160
213
|
value = T.cast(self[key], T.nilable(Object))
|
data/lib/dependabot/ecosystem.rb
CHANGED
|
@@ -46,12 +46,12 @@ module Dependabot
|
|
|
46
46
|
supported_versions: [],
|
|
47
47
|
requirement: nil
|
|
48
48
|
)
|
|
49
|
-
@name =
|
|
49
|
+
@name = name
|
|
50
50
|
@detected_version = T.let(detected_version || version, T.nilable(Dependabot::Version))
|
|
51
|
-
@version =
|
|
52
|
-
@deprecated_versions =
|
|
53
|
-
@supported_versions =
|
|
54
|
-
@requirement =
|
|
51
|
+
@version = version
|
|
52
|
+
@deprecated_versions = deprecated_versions
|
|
53
|
+
@supported_versions = supported_versions
|
|
54
|
+
@requirement = requirement
|
|
55
55
|
end
|
|
56
56
|
|
|
57
57
|
# The name of the package manager (e.g., "bundler", "npm").
|
|
@@ -177,9 +177,9 @@ module Dependabot
|
|
|
177
177
|
package_manager:,
|
|
178
178
|
language: nil
|
|
179
179
|
)
|
|
180
|
-
@name =
|
|
181
|
-
@package_manager =
|
|
182
|
-
@language =
|
|
180
|
+
@name = name
|
|
181
|
+
@package_manager = package_manager
|
|
182
|
+
@language = language
|
|
183
183
|
end
|
|
184
184
|
|
|
185
185
|
# The name of the ecosystem (mandatory).
|
data/lib/dependabot/errors.rb
CHANGED
|
@@ -483,7 +483,7 @@ module Dependabot
|
|
|
483
483
|
|
|
484
484
|
sig { params(error_type: String, message: T.any(T.nilable(String), MatchData)).void }
|
|
485
485
|
def initialize(error_type, message = nil)
|
|
486
|
-
@error_type =
|
|
486
|
+
@error_type = error_type
|
|
487
487
|
|
|
488
488
|
super(message || error_type)
|
|
489
489
|
end
|
|
@@ -325,7 +325,7 @@ module Dependabot
|
|
|
325
325
|
|
|
326
326
|
sig { params(path: String).returns(T::Boolean) }
|
|
327
327
|
def in_submodule?(path)
|
|
328
|
-
subpaths(path.delete_prefix("/")).
|
|
328
|
+
subpaths(path.delete_prefix("/")).intersect?(@submodules)
|
|
329
329
|
end
|
|
330
330
|
|
|
331
331
|
# Given a "foo/bar/baz" path, returns ["foo", "foo/bar", "foo/bar/baz"]
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# typed:
|
|
1
|
+
# typed: strong
|
|
2
2
|
# frozen_string_literal: true
|
|
3
3
|
|
|
4
4
|
require "sorbet-runtime"
|
|
@@ -79,7 +79,7 @@ module Dependabot
|
|
|
79
79
|
def requirement_changed?(file, dependency)
|
|
80
80
|
changed_requirements = dependency.requirements - T.must(dependency.previous_requirements)
|
|
81
81
|
|
|
82
|
-
changed_requirements.any? { |f| f
|
|
82
|
+
changed_requirements.any? { |f| f.file == file.name }
|
|
83
83
|
end
|
|
84
84
|
|
|
85
85
|
sig { params(file: Dependabot::DependencyFile, content: String).returns(Dependabot::DependencyFile) }
|
|
@@ -62,10 +62,7 @@ module Dependabot
|
|
|
62
62
|
require_relative "commits_finder"
|
|
63
63
|
|
|
64
64
|
# Earlier entries are preferred
|
|
65
|
-
CHANGELOG_NAMES =
|
|
66
|
-
%w(changelog news changes history release whatsnew releases).freeze,
|
|
67
|
-
T::Array[String]
|
|
68
|
-
)
|
|
65
|
+
CHANGELOG_NAMES = %w(changelog news changes history release whatsnew releases).freeze
|
|
69
66
|
|
|
70
67
|
sig { returns(T.nilable(Dependabot::Source)) }
|
|
71
68
|
attr_reader :source
|
|
@@ -452,7 +449,7 @@ module Dependabot
|
|
|
452
449
|
sig { returns(T.nilable(String)) }
|
|
453
450
|
def previous_ref
|
|
454
451
|
previous_refs = dependency.previous_requirements&.filter_map do |r|
|
|
455
|
-
r.
|
|
452
|
+
r.source_string("ref")
|
|
456
453
|
end&.uniq
|
|
457
454
|
previous_refs.first if previous_refs&.one?
|
|
458
455
|
end
|
|
@@ -460,7 +457,7 @@ module Dependabot
|
|
|
460
457
|
sig { returns(T.nilable(String)) }
|
|
461
458
|
def new_ref
|
|
462
459
|
new_refs = dependency.requirements.filter_map do |r|
|
|
463
|
-
r.
|
|
460
|
+
r.source_string("ref")
|
|
464
461
|
end.uniq
|
|
465
462
|
new_refs.first if new_refs.one?
|
|
466
463
|
end
|
|
@@ -479,7 +476,7 @@ module Dependabot
|
|
|
479
476
|
return false if dependency.package_manager == "composer"
|
|
480
477
|
|
|
481
478
|
requirements = dependency.requirements
|
|
482
|
-
sources = requirements.map
|
|
479
|
+
sources = requirements.map(&:source_hash).uniq.compact
|
|
483
480
|
return false if sources.empty?
|
|
484
481
|
|
|
485
482
|
sources.all? { |s| s[:type] == "git" || s["type"] == "git" }
|
|
@@ -169,7 +169,7 @@ module Dependabot
|
|
|
169
169
|
sig { returns(T.nilable(String)) }
|
|
170
170
|
def previous_ref
|
|
171
171
|
previous_refs = T.must(dependency.previous_requirements).filter_map do |r|
|
|
172
|
-
r.
|
|
172
|
+
r.source_string("ref")
|
|
173
173
|
end.uniq
|
|
174
174
|
previous_refs.first if previous_refs.one?
|
|
175
175
|
end
|
|
@@ -177,7 +177,7 @@ module Dependabot
|
|
|
177
177
|
sig { returns(T.nilable(String)) }
|
|
178
178
|
def new_ref
|
|
179
179
|
new_refs = dependency.requirements.filter_map do |r|
|
|
180
|
-
r.
|
|
180
|
+
r.source_string("ref")
|
|
181
181
|
end.uniq
|
|
182
182
|
new_refs.first if new_refs.one?
|
|
183
183
|
end
|
|
@@ -190,7 +190,7 @@ module Dependabot
|
|
|
190
190
|
return false if dependency.package_manager == "composer"
|
|
191
191
|
|
|
192
192
|
requirements = dependency.requirements
|
|
193
|
-
sources = requirements.map
|
|
193
|
+
sources = requirements.map(&:source_hash).uniq.compact
|
|
194
194
|
return false if sources.empty?
|
|
195
195
|
|
|
196
196
|
sources.all? { |s| s[:type] == "git" || s["type"] == "git" }
|
|
@@ -136,10 +136,11 @@ module Dependabot
|
|
|
136
136
|
sig { params(version: T.nilable(Dependabot::Version)).returns(T::Boolean) }
|
|
137
137
|
def satisfies_previous_reqs?(version)
|
|
138
138
|
T.must(dependency.previous_requirements).all? do |req|
|
|
139
|
-
|
|
139
|
+
requirement = req.requirement_string
|
|
140
|
+
next true unless requirement
|
|
140
141
|
|
|
141
142
|
requirement_class
|
|
142
|
-
.requirements_array(
|
|
143
|
+
.requirements_array(requirement)
|
|
143
144
|
.all? { |r| r.satisfied_by?(version) }
|
|
144
145
|
end
|
|
145
146
|
end
|
|
@@ -151,7 +152,7 @@ module Dependabot
|
|
|
151
152
|
# internally
|
|
152
153
|
return false if dependency.package_manager == "composer"
|
|
153
154
|
|
|
154
|
-
sources = requirements&.map
|
|
155
|
+
sources = requirements&.map(&:source_hash)&.uniq&.compact
|
|
155
156
|
return false if sources.nil? || sources.empty?
|
|
156
157
|
|
|
157
158
|
sources.all? { |s| s[:type] == "git" || s["type"] == "git" }
|
|
@@ -168,7 +169,7 @@ module Dependabot
|
|
|
168
169
|
return unless git_source?(dependency.previous_requirements)
|
|
169
170
|
|
|
170
171
|
previous_refs = T.must(dependency.previous_requirements).filter_map do |r|
|
|
171
|
-
r.
|
|
172
|
+
r.source_string("ref")
|
|
172
173
|
end.uniq
|
|
173
174
|
previous_refs.first if previous_refs.one?
|
|
174
175
|
end
|
|
@@ -178,7 +179,7 @@ module Dependabot
|
|
|
178
179
|
return unless git_source?(dependency.previous_requirements)
|
|
179
180
|
|
|
180
181
|
new_refs = dependency.requirements.filter_map do |r|
|
|
181
|
-
r.
|
|
182
|
+
r.source_string("ref")
|
|
182
183
|
end.uniq
|
|
183
184
|
new_refs.first if new_refs.one?
|
|
184
185
|
end
|
|
@@ -198,15 +198,9 @@ module Dependabot
|
|
|
198
198
|
sig { params(releases: T::Array[ReleaseType], conservative: T::Boolean).returns(T::Array[ReleaseType]) }
|
|
199
199
|
def filter_releases_using_previous_version(releases, conservative:)
|
|
200
200
|
releases.reject do |release|
|
|
201
|
-
|
|
202
|
-
cleaned_name = release.name&.gsub(/^[^0-9]*/, "")
|
|
203
|
-
dot_count = [cleaned_tag, cleaned_name].compact.reject(&:empty?)
|
|
204
|
-
.map { |nm| nm.chars.count(".") }.max
|
|
201
|
+
next false if release_tag_matches_version?(release, new_version)
|
|
205
202
|
|
|
206
|
-
tag_version =
|
|
207
|
-
.select { |nm| version_class.correct?(nm) }
|
|
208
|
-
.select { |nm| nm.chars.count(".") == dot_count }
|
|
209
|
-
.map { |nm| version_class.new(nm) }.max
|
|
203
|
+
tag_version = possible_versions(release).max
|
|
210
204
|
|
|
211
205
|
next conservative unless tag_version
|
|
212
206
|
|
|
@@ -221,15 +215,9 @@ module Dependabot
|
|
|
221
215
|
updated_version = version_class.new(new_version)
|
|
222
216
|
|
|
223
217
|
releases.reject do |release|
|
|
224
|
-
|
|
225
|
-
cleaned_name = release.name&.gsub(/^[^0-9]*/, "")
|
|
226
|
-
dot_count = [cleaned_tag, cleaned_name].compact.reject(&:empty?)
|
|
227
|
-
.map { |nm| nm.chars.count(".") }.max
|
|
218
|
+
next false if release_tag_matches_version?(release, new_version)
|
|
228
219
|
|
|
229
|
-
tag_version =
|
|
230
|
-
.select { |nm| version_class.correct?(nm) }
|
|
231
|
-
.select { |nm| nm.chars.count(".") == dot_count }
|
|
232
|
-
.map { |nm| version_class.new(nm) }.min
|
|
220
|
+
tag_version = possible_versions(release).min
|
|
233
221
|
|
|
234
222
|
next conservative unless tag_version
|
|
235
223
|
|
|
@@ -239,6 +227,26 @@ module Dependabot
|
|
|
239
227
|
end
|
|
240
228
|
end
|
|
241
229
|
|
|
230
|
+
sig { params(release: ReleaseType).returns(T::Array[Dependabot::Version]) }
|
|
231
|
+
def possible_versions(release)
|
|
232
|
+
candidates = [release.tag_name, release.name].compact
|
|
233
|
+
.map { |name| name.gsub(/^[^0-9]*/, "") }
|
|
234
|
+
.reject(&:empty?)
|
|
235
|
+
.select { |name| version_class.correct?(name) }
|
|
236
|
+
dot_count = candidates.map { |name| name.chars.count(".") }.max
|
|
237
|
+
return [] unless dot_count
|
|
238
|
+
|
|
239
|
+
candidates.select { |name| name.chars.count(".") == dot_count }
|
|
240
|
+
.map { |name| version_class.new(name) }
|
|
241
|
+
end
|
|
242
|
+
|
|
243
|
+
sig { params(release: ReleaseType, version: T.nilable(String)).returns(T::Boolean) }
|
|
244
|
+
def release_tag_matches_version?(release, version)
|
|
245
|
+
return false unless version
|
|
246
|
+
|
|
247
|
+
release.tag_name.gsub(/^[^0-9]*/, "") == version.gsub(/^[^0-9]*/, "")
|
|
248
|
+
end
|
|
249
|
+
|
|
242
250
|
sig { returns(T.nilable(ReleaseType)) }
|
|
243
251
|
def updated_release
|
|
244
252
|
release_for_version(new_version)
|
|
@@ -15,7 +15,7 @@ module Dependabot
|
|
|
15
15
|
require "dependabot/metadata_finders/base/release_finder"
|
|
16
16
|
require "dependabot/metadata_finders/base/commits_finder"
|
|
17
17
|
|
|
18
|
-
PACKAGE_MANAGERS_WITH_RELIABLE_DIRECTORIES =
|
|
18
|
+
PACKAGE_MANAGERS_WITH_RELIABLE_DIRECTORIES = %w(bun npm_and_yarn pub).freeze
|
|
19
19
|
|
|
20
20
|
sig { returns(Dependabot::Dependency) }
|
|
21
21
|
attr_reader :dependency
|
|
@@ -20,12 +20,12 @@ module Dependabot
|
|
|
20
20
|
).void
|
|
21
21
|
end
|
|
22
22
|
def initialize(dependency:, releases: [], dist_tags: nil)
|
|
23
|
-
@dependency =
|
|
23
|
+
@dependency = dependency
|
|
24
24
|
@releases = T.let(
|
|
25
25
|
releases.sort_by(&:version).reverse,
|
|
26
26
|
T::Array[Dependabot::Package::PackageRelease]
|
|
27
27
|
)
|
|
28
|
-
@dist_tags =
|
|
28
|
+
@dist_tags = dist_tags
|
|
29
29
|
end
|
|
30
30
|
|
|
31
31
|
sig { returns(Dependabot::Dependency) }
|
|
@@ -15,9 +15,9 @@ module Dependabot
|
|
|
15
15
|
).void
|
|
16
16
|
end
|
|
17
17
|
def initialize(name:, version: nil, requirement: nil)
|
|
18
|
-
@name =
|
|
19
|
-
@version =
|
|
20
|
-
@requirement =
|
|
18
|
+
@name = name
|
|
19
|
+
@version = version
|
|
20
|
+
@requirement = requirement
|
|
21
21
|
end
|
|
22
22
|
|
|
23
23
|
sig { returns(String) }
|
|
@@ -290,9 +290,10 @@ module Dependabot
|
|
|
290
290
|
end
|
|
291
291
|
def filter_out_of_range_versions(releases)
|
|
292
292
|
reqs = dependency.requirements.filter_map do |r|
|
|
293
|
-
|
|
293
|
+
requirement = r.requirement_string
|
|
294
|
+
next if requirement.nil?
|
|
294
295
|
|
|
295
|
-
requirement_class.requirements_array(
|
|
296
|
+
requirement_class.requirements_array(requirement)
|
|
296
297
|
end
|
|
297
298
|
|
|
298
299
|
releases
|
|
@@ -325,7 +326,7 @@ module Dependabot
|
|
|
325
326
|
return true if dependency.numeric_version&.prerelease?
|
|
326
327
|
|
|
327
328
|
dependency.requirements.any? do |req|
|
|
328
|
-
req_string = req.
|
|
329
|
+
req_string = req.requirement_string || ""
|
|
329
330
|
req_string.split(",").map(&:strip).any? do |r|
|
|
330
331
|
version_str = r.gsub(/^\s*[!<>=~^]+\s*/, "").strip
|
|
331
332
|
next false unless version_class.correct?(version_str)
|
|
@@ -40,17 +40,17 @@ module Dependabot
|
|
|
40
40
|
tag: nil,
|
|
41
41
|
details: {}
|
|
42
42
|
)
|
|
43
|
-
@version =
|
|
44
|
-
@released_at =
|
|
45
|
-
@latest =
|
|
46
|
-
@yanked =
|
|
47
|
-
@yanked_reason =
|
|
48
|
-
@downloads =
|
|
49
|
-
@url =
|
|
50
|
-
@package_type =
|
|
51
|
-
@language =
|
|
52
|
-
@tag =
|
|
53
|
-
@details =
|
|
43
|
+
@version = version
|
|
44
|
+
@released_at = released_at
|
|
45
|
+
@latest = latest
|
|
46
|
+
@yanked = yanked
|
|
47
|
+
@yanked_reason = yanked_reason
|
|
48
|
+
@downloads = downloads
|
|
49
|
+
@url = url
|
|
50
|
+
@package_type = package_type
|
|
51
|
+
@language = language
|
|
52
|
+
@tag = tag
|
|
53
|
+
@details = details
|
|
54
54
|
end
|
|
55
55
|
|
|
56
56
|
sig { returns(Dependabot::Version) }
|
|
@@ -13,18 +13,9 @@ module Dependabot
|
|
|
13
13
|
|
|
14
14
|
class Error < Dependabot::DependabotError; end
|
|
15
15
|
|
|
16
|
-
SOLO_PLACEHOLDERS =
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
)
|
|
20
|
-
GROUP_PLACEHOLDERS = T.let(
|
|
21
|
-
%w(prefix package_manager directory target_branch group_name name).freeze,
|
|
22
|
-
T::Array[String]
|
|
23
|
-
)
|
|
24
|
-
MULTI_ECO_PLACEHOLDERS = T.let(
|
|
25
|
-
%w(prefix target_branch group_name name).freeze,
|
|
26
|
-
T::Array[String]
|
|
27
|
-
)
|
|
16
|
+
SOLO_PLACEHOLDERS = %w(prefix package_manager directory target_branch dependency version name).freeze
|
|
17
|
+
GROUP_PLACEHOLDERS = %w(prefix package_manager directory target_branch group_name name).freeze
|
|
18
|
+
MULTI_ECO_PLACEHOLDERS = %w(prefix target_branch group_name name).freeze
|
|
28
19
|
|
|
29
20
|
# ---------------------------------------------------------------
|
|
30
21
|
# 1. validate_template(template, strategy:)
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# typed:
|
|
1
|
+
# typed: strong
|
|
2
2
|
# frozen_string_literal: true
|
|
3
3
|
|
|
4
4
|
require "digest"
|
|
@@ -88,14 +88,14 @@ module Dependabot
|
|
|
88
88
|
def updating_a_property?
|
|
89
89
|
T.must(dependencies.first)
|
|
90
90
|
.requirements
|
|
91
|
-
.any? { |r| r.
|
|
91
|
+
.any? { |r| r.metadata_string("property_name") }
|
|
92
92
|
end
|
|
93
93
|
|
|
94
94
|
sig { returns(T::Boolean) }
|
|
95
95
|
def updating_a_dependency_set?
|
|
96
96
|
T.must(dependencies.first)
|
|
97
97
|
.requirements
|
|
98
|
-
.any? { |r| r.
|
|
98
|
+
.any? { |r| r.metadata_string_hash("dependency_set") }
|
|
99
99
|
end
|
|
100
100
|
|
|
101
101
|
sig { returns(String) }
|
|
@@ -103,8 +103,8 @@ module Dependabot
|
|
|
103
103
|
@property_name ||=
|
|
104
104
|
T.let(
|
|
105
105
|
T.must(dependencies.first).requirements
|
|
106
|
-
.find { |r| r.
|
|
107
|
-
&.
|
|
106
|
+
.find { |r| r.metadata_string("property_name") }
|
|
107
|
+
&.metadata_string("property_name"),
|
|
108
108
|
T.nilable(String)
|
|
109
109
|
)
|
|
110
110
|
|
|
@@ -118,9 +118,9 @@ module Dependabot
|
|
|
118
118
|
@dependency_set ||=
|
|
119
119
|
T.let(
|
|
120
120
|
T.must(dependencies.first).requirements
|
|
121
|
-
.find { |r| r.
|
|
122
|
-
&.
|
|
123
|
-
T.nilable(T::Hash[
|
|
121
|
+
.find { |r| r.metadata_string_hash("dependency_set") }
|
|
122
|
+
&.metadata_string_hash("dependency_set"),
|
|
123
|
+
T.nilable(T::Hash[Symbol, String])
|
|
124
124
|
)
|
|
125
125
|
|
|
126
126
|
raise "No dependency set!" unless @dependency_set
|
|
@@ -172,9 +172,11 @@ module Dependabot
|
|
|
172
172
|
T.must(dependency.version)[0..6]
|
|
173
173
|
elsif dependency.version == dependency.previous_version &&
|
|
174
174
|
package_manager == "docker"
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
175
|
+
T.must(
|
|
176
|
+
dependency.requirements
|
|
177
|
+
.filter_map { |r| r.source_string("digest") }
|
|
178
|
+
.first
|
|
179
|
+
).split(":").last&.[](0..6)
|
|
178
180
|
else
|
|
179
181
|
dependency.version
|
|
180
182
|
end
|
|
@@ -183,7 +185,7 @@ module Dependabot
|
|
|
183
185
|
sig { params(dependency: Dependabot::Dependency).returns(T.nilable(String)) }
|
|
184
186
|
def previous_ref(dependency)
|
|
185
187
|
previous_refs = T.must(dependency.previous_requirements).filter_map do |r|
|
|
186
|
-
r.
|
|
188
|
+
r.source_string("ref")
|
|
187
189
|
end.uniq
|
|
188
190
|
previous_refs.first if previous_refs.one?
|
|
189
191
|
end
|
|
@@ -191,7 +193,7 @@ module Dependabot
|
|
|
191
193
|
sig { params(dependency: Dependabot::Dependency).returns(T.nilable(String)) }
|
|
192
194
|
def new_ref(dependency)
|
|
193
195
|
new_refs = dependency.requirements.filter_map do |r|
|
|
194
|
-
r.
|
|
196
|
+
r.source_string("ref")
|
|
195
197
|
end.uniq
|
|
196
198
|
new_refs.first if new_refs.one?
|
|
197
199
|
end
|
|
@@ -208,10 +210,10 @@ module Dependabot
|
|
|
208
210
|
dependency.requirements - T.must(dependency.previous_requirements)
|
|
209
211
|
|
|
210
212
|
gemspec =
|
|
211
|
-
updated_reqs.find { |r| r
|
|
212
|
-
return gemspec
|
|
213
|
+
updated_reqs.find { |r| T.must(r.file).match?(%r{^[^/]*\.gemspec$}) }
|
|
214
|
+
return gemspec.requirement_string if gemspec
|
|
213
215
|
|
|
214
|
-
updated_reqs.first&.
|
|
216
|
+
updated_reqs.first&.requirement_string
|
|
215
217
|
end
|
|
216
218
|
|
|
217
219
|
# TODO: Bring this in line with existing library checks that we do in the
|
|
@@ -165,43 +165,36 @@ module Dependabot
|
|
|
165
165
|
)
|
|
166
166
|
end
|
|
167
167
|
|
|
168
|
-
# rubocop:disable Metrics/PerceivedComplexity
|
|
169
168
|
sig { params(dep: Dependabot::Dependency).returns(T.nilable(String)) }
|
|
170
169
|
def version(dep)
|
|
171
170
|
return dep.version if version_class.correct?(dep.version)
|
|
172
171
|
|
|
173
|
-
source = dep.requirements.find
|
|
174
|
-
|
|
175
|
-
return dep.version unless type == "git"
|
|
172
|
+
source = dep.requirements.find(&:source)
|
|
173
|
+
return dep.version if source.nil?
|
|
174
|
+
return dep.version unless source.source_string("type") == "git"
|
|
176
175
|
|
|
177
|
-
|
|
178
|
-
version_from_ref = ref&.gsub(/^v/, "")
|
|
176
|
+
version_from_ref = source.source_string("ref")&.gsub(/^v/, "")
|
|
179
177
|
return dep.version unless version_from_ref
|
|
180
178
|
return dep.version unless version_class.correct?(version_from_ref)
|
|
181
179
|
|
|
182
180
|
version_from_ref
|
|
183
181
|
end
|
|
184
|
-
# rubocop:enable Metrics/PerceivedComplexity
|
|
185
182
|
|
|
186
|
-
# rubocop:disable Metrics/PerceivedComplexity
|
|
187
183
|
sig { params(dep: Dependabot::Dependency).returns(T.nilable(String)) }
|
|
188
184
|
def previous_version(dep)
|
|
189
185
|
version_str = dep.previous_version
|
|
190
186
|
return version_str if version_class.correct?(version_str)
|
|
191
187
|
|
|
192
|
-
source = T.must(dep.previous_requirements)
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
return version_str unless type == "git"
|
|
188
|
+
source = T.must(dep.previous_requirements).find(&:source)
|
|
189
|
+
return version_str if source.nil?
|
|
190
|
+
return version_str unless source.source_string("type") == "git"
|
|
196
191
|
|
|
197
|
-
|
|
198
|
-
version_from_ref = ref&.gsub(/^v/, "")
|
|
192
|
+
version_from_ref = source.source_string("ref")&.gsub(/^v/, "")
|
|
199
193
|
return version_str unless version_from_ref
|
|
200
194
|
return version_str unless version_class.correct?(version_from_ref)
|
|
201
195
|
|
|
202
196
|
version_from_ref
|
|
203
197
|
end
|
|
204
|
-
# rubocop:enable Metrics/PerceivedComplexity
|
|
205
198
|
|
|
206
199
|
sig { returns(T.nilable(T::Array[String])) }
|
|
207
200
|
def create_default_dependencies_label_if_required
|
|
@@ -636,14 +636,14 @@ module Dependabot
|
|
|
636
636
|
def updating_a_property?
|
|
637
637
|
T.must(dependencies.first)
|
|
638
638
|
.requirements
|
|
639
|
-
.any? { |r| r.
|
|
639
|
+
.any? { |r| r.metadata_string("property_name") }
|
|
640
640
|
end
|
|
641
641
|
|
|
642
642
|
sig { returns(T::Boolean) }
|
|
643
643
|
def updating_a_dependency_set?
|
|
644
644
|
T.must(dependencies.first)
|
|
645
645
|
.requirements
|
|
646
|
-
.any? { |r| r.
|
|
646
|
+
.any? { |r| r.metadata_string_hash("dependency_set") }
|
|
647
647
|
end
|
|
648
648
|
|
|
649
649
|
sig { returns(T::Boolean) }
|
|
@@ -663,8 +663,8 @@ module Dependabot
|
|
|
663
663
|
T.let(
|
|
664
664
|
dependencies.first
|
|
665
665
|
&.requirements
|
|
666
|
-
&.find { |r| r.
|
|
667
|
-
&.
|
|
666
|
+
&.find { |r| r.metadata_string("property_name") }
|
|
667
|
+
&.metadata_string("property_name"),
|
|
668
668
|
T.nilable(String)
|
|
669
669
|
)
|
|
670
670
|
|
|
@@ -679,9 +679,9 @@ module Dependabot
|
|
|
679
679
|
T.let(
|
|
680
680
|
dependencies.first
|
|
681
681
|
&.requirements
|
|
682
|
-
&.find { |r| r.
|
|
683
|
-
&.
|
|
684
|
-
T.nilable(T
|
|
682
|
+
&.find { |r| r.metadata_string_hash("dependency_set") }
|
|
683
|
+
&.metadata_string_hash("dependency_set"),
|
|
684
|
+
T.nilable(T::Hash[Symbol, String])
|
|
685
685
|
)
|
|
686
686
|
|
|
687
687
|
raise "No dependency set!" unless @dependency_set
|
|
@@ -910,10 +910,10 @@ module Dependabot
|
|
|
910
910
|
T.must(dependency.previous_requirements) - dependency.requirements
|
|
911
911
|
|
|
912
912
|
gemspec =
|
|
913
|
-
old_reqs.find { |r| r
|
|
914
|
-
return gemspec.
|
|
913
|
+
old_reqs.find { |r| T.must(r.file).match?(%r{^[^/]*\.gemspec$}) }
|
|
914
|
+
return gemspec.requirement_string if gemspec
|
|
915
915
|
|
|
916
|
-
req = T.must(old_reqs.first).
|
|
916
|
+
req = T.must(old_reqs.first).requirement_string
|
|
917
917
|
return req if req
|
|
918
918
|
|
|
919
919
|
dependency.previous_ref if dependency.ref_changed?
|
|
@@ -925,10 +925,10 @@ module Dependabot
|
|
|
925
925
|
dependency.requirements - T.must(dependency.previous_requirements)
|
|
926
926
|
|
|
927
927
|
gemspec =
|
|
928
|
-
updated_reqs.find { |r| r
|
|
929
|
-
return gemspec.
|
|
928
|
+
updated_reqs.find { |r| T.must(r.file).match?(%r{^[^/]*\.gemspec$}) }
|
|
929
|
+
return T.must(gemspec.requirement_string) if gemspec
|
|
930
930
|
|
|
931
|
-
req = T.must(updated_reqs.first).
|
|
931
|
+
req = T.must(updated_reqs.first).requirement_string
|
|
932
932
|
return req if req
|
|
933
933
|
return T.must(dependency.new_ref) if dependency.ref_changed? && dependency.new_ref
|
|
934
934
|
|
|
@@ -16,23 +16,16 @@ module Dependabot
|
|
|
16
16
|
class PrNamePrefixer # rubocop:disable Metrics/ClassLength
|
|
17
17
|
extend T::Sig
|
|
18
18
|
|
|
19
|
-
ANGULAR_PREFIXES =
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
busts_in_silhouette camera_flash card_file_box chart_with_upwards_trend checkered_flag children_crossing
|
|
30
|
-
clown_face construction construction_worker egg fire globe_with_meridians green_apple green_heart hankey
|
|
31
|
-
heavy_minus_sign heavy_plus_sign iphone lipstick lock loud_sound memo mute ok_hand package page_facing_up
|
|
32
|
-
pencil2 penguin pushpin recycle rewind robot rocket rotating_light see_no_evil sparkles speech_balloon tada
|
|
33
|
-
truck twisted_rightwards_arrows whale wheelchair white_check_mark wrench zap).freeze,
|
|
34
|
-
T::Array[String]
|
|
35
|
-
)
|
|
19
|
+
ANGULAR_PREFIXES = %w(build chore ci docs feat fix perf refactor style test).freeze
|
|
20
|
+
ESLINT_PREFIXES = %w(Breaking Build Chore Docs Fix New Update Upgrade).freeze
|
|
21
|
+
GITMOJI_PREFIXES = %w(
|
|
22
|
+
alien ambulance apple arrow_down arrow_up art beers bento bookmark boom bug building_construction
|
|
23
|
+
bulb busts_in_silhouette camera_flash card_file_box chart_with_upwards_trend checkered_flag children_crossing
|
|
24
|
+
clown_face construction construction_worker egg fire globe_with_meridians green_apple green_heart hankey
|
|
25
|
+
heavy_minus_sign heavy_plus_sign iphone lipstick lock loud_sound memo mute ok_hand package page_facing_up
|
|
26
|
+
pencil2 penguin pushpin recycle rewind robot rocket rotating_light see_no_evil sparkles speech_balloon tada
|
|
27
|
+
truck twisted_rightwards_arrows whale wheelchair white_check_mark wrench zap
|
|
28
|
+
).freeze
|
|
36
29
|
|
|
37
30
|
sig do
|
|
38
31
|
params(
|
|
@@ -70,7 +70,7 @@ module Dependabot
|
|
|
70
70
|
@pull_request_number = pull_request_number
|
|
71
71
|
@author_details = author_details
|
|
72
72
|
@signature_key = signature_key
|
|
73
|
-
@commit_message =
|
|
73
|
+
@commit_message = commit_message
|
|
74
74
|
end
|
|
75
75
|
|
|
76
76
|
sig { returns(T.nilable(Sawyer::Resource)) }
|
data/lib/dependabot/source.rb
CHANGED
|
@@ -63,10 +63,7 @@ module Dependabot
|
|
|
63
63
|
(?:#{CODECOMMIT_SOURCE})
|
|
64
64
|
/x
|
|
65
65
|
|
|
66
|
-
IGNORED_PROVIDER_HOSTS =
|
|
67
|
-
%w(gitbox.apache.org svn.apache.org fuchsia.googlesource.com).freeze,
|
|
68
|
-
T::Array[String]
|
|
69
|
-
)
|
|
66
|
+
IGNORED_PROVIDER_HOSTS = %w(gitbox.apache.org svn.apache.org fuchsia.googlesource.com).freeze
|
|
70
67
|
|
|
71
68
|
sig { returns(String) }
|
|
72
69
|
attr_accessor :provider
|
|
@@ -379,7 +379,7 @@ module Dependabot
|
|
|
379
379
|
return false
|
|
380
380
|
end
|
|
381
381
|
|
|
382
|
-
updated_requirements.none? { |r| r
|
|
382
|
+
updated_requirements.none? { |r| r.requirement == :unfixable }
|
|
383
383
|
end
|
|
384
384
|
|
|
385
385
|
sig { returns(T::Boolean) }
|
|
@@ -415,7 +415,7 @@ module Dependabot
|
|
|
415
415
|
def version_from_requirements
|
|
416
416
|
@version_from_requirements ||=
|
|
417
417
|
T.let(
|
|
418
|
-
dependency.requirements.filter_map
|
|
418
|
+
dependency.requirements.filter_map(&:requirement_string)
|
|
419
419
|
.flat_map { |req_str| requirement_class.requirements_array(req_str) }
|
|
420
420
|
.flat_map(&:requirements)
|
|
421
421
|
.reject { |req_array| req_array.first.start_with?("<") }
|
|
@@ -429,7 +429,7 @@ module Dependabot
|
|
|
429
429
|
def requirements_can_update?
|
|
430
430
|
return false if changed_requirements.none?
|
|
431
431
|
|
|
432
|
-
changed_requirements.none? { |r| r
|
|
432
|
+
changed_requirements.none? { |r| r.requirement == :unfixable }
|
|
433
433
|
end
|
|
434
434
|
end
|
|
435
435
|
end
|
data/lib/dependabot/version.rb
CHANGED
|
@@ -97,8 +97,7 @@ module Dependabot
|
|
|
97
97
|
end
|
|
98
98
|
|
|
99
99
|
# https://semver.org/#is-there-a-suggested-regular-expression-regex-to-check-a-semver-string
|
|
100
|
-
SEMVER_REGEX =
|
|
101
|
-
/
|
|
100
|
+
SEMVER_REGEX = /
|
|
102
101
|
# major.minor.patch
|
|
103
102
|
^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)
|
|
104
103
|
# pre-release
|
|
@@ -109,9 +108,7 @@ module Dependabot
|
|
|
109
108
|
# build metadata
|
|
110
109
|
(?:\+(
|
|
111
110
|
[0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*
|
|
112
|
-
))?$/x
|
|
113
|
-
Regexp
|
|
114
|
-
)
|
|
111
|
+
))?$/x
|
|
115
112
|
|
|
116
113
|
sig { params(version: String).returns(T::Boolean) }
|
|
117
114
|
def self.valid_semver?(version)
|
data/lib/dependabot.rb
CHANGED
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: dependabot-common
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.391.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Dependabot
|
|
@@ -625,7 +625,7 @@ licenses:
|
|
|
625
625
|
- MIT
|
|
626
626
|
metadata:
|
|
627
627
|
bug_tracker_uri: https://github.com/dependabot/dependabot-core/issues
|
|
628
|
-
changelog_uri: https://github.com/dependabot/dependabot-core/releases/tag/v0.
|
|
628
|
+
changelog_uri: https://github.com/dependabot/dependabot-core/releases/tag/v0.391.0
|
|
629
629
|
rdoc_options: []
|
|
630
630
|
require_paths:
|
|
631
631
|
- lib
|