dependabot-common 0.271.0 → 0.273.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/errors.rb +12 -0
- data/lib/dependabot/file_parsers/base.rb +6 -0
- data/lib/dependabot/file_updaters/base.rb +2 -2
- data/lib/dependabot/notices.rb +210 -0
- data/lib/dependabot/package_manager.rb +84 -0
- data/lib/dependabot/pull_request_creator/message_builder.rb +24 -3
- data/lib/dependabot/sem_version2.rb +131 -0
- data/lib/dependabot.rb +1 -1
- metadata +6 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: be0c28765d665424088cb737d933cf376c29d931e1d642f96562d362c406fcf0
|
4
|
+
data.tar.gz: de8f912ee099ed27b8d14811f7fb67f9b83119dc7db2483645947b2cd12b380d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e45c119606e121da9f919de9e40ff1ae63e22ad0167308bcb1e74b626296607fa8d05634ccb7ac922943d547c0f99820fab5c89fe105580146b5dc2224fbd97a
|
7
|
+
data.tar.gz: 2bc6a5d526316d9d81cbfb0e03d06699a28e03757ff36f07a46d870a1e55a89794ffd834f3c1c8e21c7ccf737ed325bc1af111a2e22234641c54e1bb9d8cd56b
|
data/lib/dependabot/errors.rb
CHANGED
@@ -226,6 +226,11 @@ module Dependabot
|
|
226
226
|
"error-message": error.message
|
227
227
|
}
|
228
228
|
}
|
229
|
+
when Dependabot::OutOfDisk
|
230
|
+
{
|
231
|
+
"error-type": "out_of_disk",
|
232
|
+
"error-detail": {}
|
233
|
+
}
|
229
234
|
when Dependabot::GoModulePathMismatch
|
230
235
|
{
|
231
236
|
"error-type": "go_module_path_mismatch",
|
@@ -235,6 +240,11 @@ module Dependabot
|
|
235
240
|
"go-mod": error.go_mod
|
236
241
|
}
|
237
242
|
}
|
243
|
+
when BadRequirementError
|
244
|
+
{
|
245
|
+
"error-type": "illformed_requirement",
|
246
|
+
"error-detail": { message: error.message }
|
247
|
+
}
|
238
248
|
when
|
239
249
|
IncompatibleCPU,
|
240
250
|
NetworkUnsafeHTTP
|
@@ -508,6 +518,8 @@ module Dependabot
|
|
508
518
|
|
509
519
|
class DependencyFileNotResolvable < DependabotError; end
|
510
520
|
|
521
|
+
class BadRequirementError < Gem::Requirement::BadRequirementError; end
|
522
|
+
|
511
523
|
#######################
|
512
524
|
# Source level errors #
|
513
525
|
#######################
|
@@ -3,6 +3,7 @@
|
|
3
3
|
|
4
4
|
require "sorbet-runtime"
|
5
5
|
require "dependabot/credential"
|
6
|
+
require "dependabot/package_manager"
|
6
7
|
|
7
8
|
module Dependabot
|
8
9
|
module FileParsers
|
@@ -53,6 +54,11 @@ module Dependabot
|
|
53
54
|
sig { abstract.returns(T::Array[Dependabot::Dependency]) }
|
54
55
|
def parse; end
|
55
56
|
|
57
|
+
sig { returns(T.nilable(PackageManagerBase)) }
|
58
|
+
def package_manager
|
59
|
+
nil
|
60
|
+
end
|
61
|
+
|
56
62
|
private
|
57
63
|
|
58
64
|
sig { abstract.void }
|
@@ -28,8 +28,8 @@ module Dependabot
|
|
28
28
|
sig { returns(T::Hash[Symbol, T.untyped]) }
|
29
29
|
attr_reader :options
|
30
30
|
|
31
|
-
sig { overridable.
|
32
|
-
def self.updated_files_regex
|
31
|
+
sig { overridable.returns(T::Array[Regexp]) }
|
32
|
+
def self.updated_files_regex
|
33
33
|
raise NotImplementedError
|
34
34
|
end
|
35
35
|
|
@@ -0,0 +1,210 @@
|
|
1
|
+
# typed: strong
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
require "sorbet-runtime"
|
5
|
+
require "dependabot/package_manager"
|
6
|
+
|
7
|
+
module Dependabot
|
8
|
+
class Notice
|
9
|
+
module NoticeMode
|
10
|
+
INFO = "INFO"
|
11
|
+
WARN = "WARN"
|
12
|
+
ERROR = "ERROR"
|
13
|
+
end
|
14
|
+
|
15
|
+
extend T::Sig
|
16
|
+
|
17
|
+
sig { returns(String) }
|
18
|
+
attr_reader :mode, :type, :package_manager_name, :title, :description
|
19
|
+
|
20
|
+
sig { returns(T::Boolean) }
|
21
|
+
attr_reader :show_in_pr, :show_alert
|
22
|
+
|
23
|
+
# Initializes a new Notice object.
|
24
|
+
# @param mode [String] The mode of the notice (e.g., "WARN", "ERROR").
|
25
|
+
# @param type [String] The type of the notice (e.g., "bundler_deprecated_warn").
|
26
|
+
# @param package_manager_name [String] The name of the package manager (e.g., "bundler").
|
27
|
+
# @param title [String] The title of the notice.
|
28
|
+
# @param description [String] The main description of the notice.
|
29
|
+
# @param show_in_pr [Boolean] Whether the notice should be shown in a pull request.
|
30
|
+
# @param show_alert [Boolean] Whether the notice should be shown in alerts.
|
31
|
+
sig do
|
32
|
+
params(
|
33
|
+
mode: String,
|
34
|
+
type: String,
|
35
|
+
package_manager_name: String,
|
36
|
+
title: String,
|
37
|
+
description: String,
|
38
|
+
show_in_pr: T::Boolean,
|
39
|
+
show_alert: T::Boolean
|
40
|
+
).void
|
41
|
+
end
|
42
|
+
def initialize(
|
43
|
+
mode:, type:, package_manager_name:,
|
44
|
+
title: "", description: "",
|
45
|
+
show_in_pr: false, show_alert: false
|
46
|
+
)
|
47
|
+
@mode = mode
|
48
|
+
@type = type
|
49
|
+
@package_manager_name = package_manager_name
|
50
|
+
@title = title
|
51
|
+
@description = description
|
52
|
+
@show_in_pr = show_in_pr
|
53
|
+
@show_alert = show_alert
|
54
|
+
end
|
55
|
+
|
56
|
+
# Converts the Notice object to a hash.
|
57
|
+
# @return [Hash] The hash representation of the notice.
|
58
|
+
sig { returns(T::Hash[Symbol, T.untyped]) }
|
59
|
+
def to_hash
|
60
|
+
{
|
61
|
+
mode: @mode,
|
62
|
+
type: @type,
|
63
|
+
package_manager_name: @package_manager_name,
|
64
|
+
title: @title,
|
65
|
+
description: @description,
|
66
|
+
show_in_pr: @show_in_pr,
|
67
|
+
show_alert: @show_alert
|
68
|
+
}
|
69
|
+
end
|
70
|
+
|
71
|
+
# Generates a description for supported versions.
|
72
|
+
# @param supported_versions [Array<Dependabot::Version>, nil] The supported versions of the package manager.
|
73
|
+
# @param support_later_versions [Boolean] Whether later versions are supported.
|
74
|
+
# @return [String, nil] The generated description or nil if no supported versions are provided.
|
75
|
+
sig do
|
76
|
+
params(
|
77
|
+
supported_versions: T.nilable(T::Array[Dependabot::Version]),
|
78
|
+
support_later_versions: T::Boolean
|
79
|
+
).returns(String)
|
80
|
+
end
|
81
|
+
def self.generate_supported_versions_description(supported_versions, support_later_versions)
|
82
|
+
return "Please upgrade your package manager version" unless supported_versions&.any?
|
83
|
+
|
84
|
+
versions_string = supported_versions.map { |version| "`v#{version}`" }
|
85
|
+
|
86
|
+
versions_string[-1] = "or #{versions_string[-1]}" if versions_string.count > 1 && !support_later_versions
|
87
|
+
|
88
|
+
versions_string = versions_string.join(", ")
|
89
|
+
|
90
|
+
later_description = support_later_versions ? ", or later" : ""
|
91
|
+
|
92
|
+
return "Please upgrade to version #{versions_string}#{later_description}." if supported_versions.count == 1
|
93
|
+
|
94
|
+
"Please upgrade to one of the following versions: #{versions_string}#{later_description}."
|
95
|
+
end
|
96
|
+
|
97
|
+
# Generates a support notice for the given package manager.
|
98
|
+
# @param package_manager [PackageManagerBase] The package manager object.
|
99
|
+
# @return [Notice, nil] The generated notice or nil if no notice is applicable.
|
100
|
+
sig do
|
101
|
+
params(
|
102
|
+
package_manager: PackageManagerBase
|
103
|
+
).returns(T.nilable(Notice))
|
104
|
+
end
|
105
|
+
def self.generate_support_notice(package_manager)
|
106
|
+
deprecation_notice = generate_pm_deprecation_notice(package_manager)
|
107
|
+
|
108
|
+
return deprecation_notice if deprecation_notice
|
109
|
+
|
110
|
+
generate_pm_unsupported_notice(package_manager)
|
111
|
+
end
|
112
|
+
|
113
|
+
# Generates a deprecation notice for the given package manager.
|
114
|
+
# @param package_manager [PackageManagerBase] The package manager object.
|
115
|
+
# @return [Notice, nil] The generated deprecation notice or nil if the package manager is not deprecated.
|
116
|
+
sig do
|
117
|
+
params(
|
118
|
+
package_manager: PackageManagerBase
|
119
|
+
).returns(T.nilable(Notice))
|
120
|
+
end
|
121
|
+
def self.generate_pm_deprecation_notice(package_manager)
|
122
|
+
return nil unless package_manager.deprecated?
|
123
|
+
|
124
|
+
mode = NoticeMode::WARN
|
125
|
+
supported_versions_description = generate_supported_versions_description(
|
126
|
+
package_manager.supported_versions,
|
127
|
+
package_manager.support_later_versions?
|
128
|
+
)
|
129
|
+
notice_type = "#{package_manager.name}_deprecated_warn"
|
130
|
+
title = "Package manager deprecation notice"
|
131
|
+
description = "Dependabot will stop supporting `#{package_manager.name} v#{package_manager.version}`!"
|
132
|
+
|
133
|
+
## Add the supported versions to the description
|
134
|
+
description += "\n\n#{supported_versions_description}\n" unless supported_versions_description.empty?
|
135
|
+
|
136
|
+
Notice.new(
|
137
|
+
mode: mode,
|
138
|
+
type: notice_type,
|
139
|
+
package_manager_name: package_manager.name,
|
140
|
+
title: title,
|
141
|
+
description: description,
|
142
|
+
show_in_pr: true,
|
143
|
+
show_alert: true
|
144
|
+
)
|
145
|
+
end
|
146
|
+
|
147
|
+
# Generates an unsupported notice for the given package manager.
|
148
|
+
# @param package_manager [PackageManagerBase] The package manager object.
|
149
|
+
# @return [Notice, nil] The generated unsupported notice or nil if the package manager is not unsupported.
|
150
|
+
sig do
|
151
|
+
params(
|
152
|
+
package_manager: PackageManagerBase
|
153
|
+
).returns(T.nilable(Notice))
|
154
|
+
end
|
155
|
+
def self.generate_pm_unsupported_notice(package_manager)
|
156
|
+
return nil unless package_manager.unsupported?
|
157
|
+
|
158
|
+
mode = NoticeMode::ERROR
|
159
|
+
supported_versions_description = generate_supported_versions_description(
|
160
|
+
package_manager.supported_versions,
|
161
|
+
package_manager.support_later_versions?
|
162
|
+
)
|
163
|
+
notice_type = "#{package_manager.name}_unsupported_error"
|
164
|
+
title = "Package manager unsupported notice"
|
165
|
+
description = "Dependabot no longer supports `#{package_manager.name} v#{package_manager.version}`!"
|
166
|
+
|
167
|
+
## Add the supported versions to the description
|
168
|
+
description += "\n\n#{supported_versions_description}\n" unless supported_versions_description.empty?
|
169
|
+
|
170
|
+
Notice.new(
|
171
|
+
mode: mode,
|
172
|
+
type: notice_type,
|
173
|
+
package_manager_name: package_manager.name,
|
174
|
+
title: title,
|
175
|
+
description: description,
|
176
|
+
show_in_pr: true,
|
177
|
+
show_alert: true
|
178
|
+
)
|
179
|
+
end
|
180
|
+
|
181
|
+
sig { params(notice: Notice).returns(T.nilable(String)) }
|
182
|
+
def self.markdown_from_description(notice)
|
183
|
+
description = notice.description
|
184
|
+
|
185
|
+
return if description.empty?
|
186
|
+
|
187
|
+
markdown = "> [!#{markdown_mode(notice.mode)}]\n"
|
188
|
+
# Log each non-empty line of the deprecation notice description
|
189
|
+
description.each_line do |line|
|
190
|
+
line = line.strip
|
191
|
+
markdown += "> #{line}\n"
|
192
|
+
end
|
193
|
+
markdown
|
194
|
+
end
|
195
|
+
|
196
|
+
sig { params(mode: String).returns(String) }
|
197
|
+
def self.markdown_mode(mode)
|
198
|
+
case mode
|
199
|
+
when NoticeMode::INFO
|
200
|
+
"INFO"
|
201
|
+
when NoticeMode::WARN
|
202
|
+
"WARNING"
|
203
|
+
when NoticeMode::ERROR
|
204
|
+
"IMPORTANT"
|
205
|
+
else
|
206
|
+
"INFO"
|
207
|
+
end
|
208
|
+
end
|
209
|
+
end
|
210
|
+
end
|
@@ -0,0 +1,84 @@
|
|
1
|
+
# typed: strong
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
require "sorbet-runtime"
|
5
|
+
|
6
|
+
module Dependabot
|
7
|
+
class PackageManagerBase
|
8
|
+
extend T::Sig
|
9
|
+
extend T::Helpers
|
10
|
+
|
11
|
+
abstract!
|
12
|
+
|
13
|
+
# The name of the package manager (e.g., "bundler").
|
14
|
+
# @example
|
15
|
+
# package_manager.name #=> "bundler"
|
16
|
+
sig { abstract.returns(String) }
|
17
|
+
def name; end
|
18
|
+
|
19
|
+
# The version of the package manager (e.g., Dependabot::Version.new("2.1.4")).
|
20
|
+
# @example
|
21
|
+
# package_manager.version #=> Dependabot::Version.new("2.1.4")
|
22
|
+
sig { abstract.returns(Dependabot::Version) }
|
23
|
+
def version; end
|
24
|
+
|
25
|
+
# Returns an array of deprecated versions of the package manager.
|
26
|
+
# By default, returns an empty array if not overridden in the subclass.
|
27
|
+
# @example
|
28
|
+
# package_manager.deprecated_versions #=> [Dependabot::Version.new("1.0.0"), Dependabot::Version.new("1.1.0")]
|
29
|
+
sig { returns(T::Array[Dependabot::Version]) }
|
30
|
+
def deprecated_versions
|
31
|
+
[]
|
32
|
+
end
|
33
|
+
|
34
|
+
# Returns an array of unsupported versions of the package manager.
|
35
|
+
# By default, returns an empty array if not overridden in the subclass.
|
36
|
+
# @example
|
37
|
+
# package_manager.unsupported_versions #=> [Dependabot::Version.new("0.9.0")]
|
38
|
+
sig { returns(T::Array[Dependabot::Version]) }
|
39
|
+
def unsupported_versions
|
40
|
+
[]
|
41
|
+
end
|
42
|
+
|
43
|
+
# Returns an array of supported versions of the package manager.
|
44
|
+
# By default, returns an empty array if not overridden in the subclass.
|
45
|
+
# @example
|
46
|
+
# package_manager.supported_versions #=> [Dependabot::Version.new("2.0.0"), Dependabot::Version.new("2.1.0")]
|
47
|
+
sig { returns(T::Array[Dependabot::Version]) }
|
48
|
+
def supported_versions
|
49
|
+
[]
|
50
|
+
end
|
51
|
+
|
52
|
+
# Checks if the current version is deprecated.
|
53
|
+
# Returns true if the version is in the deprecated_versions array; false otherwise.
|
54
|
+
# @example
|
55
|
+
# package_manager.deprecated? #=> true
|
56
|
+
sig { returns(T::Boolean) }
|
57
|
+
def deprecated?
|
58
|
+
deprecated_versions.include?(version)
|
59
|
+
end
|
60
|
+
|
61
|
+
# Checks if the current version is unsupported.
|
62
|
+
# Returns true if the version is in the unsupported_versions array; false otherwise.
|
63
|
+
# @example
|
64
|
+
# package_manager.unsupported? #=> false
|
65
|
+
sig { returns(T::Boolean) }
|
66
|
+
def unsupported?
|
67
|
+
return true if unsupported_versions.include?(version)
|
68
|
+
|
69
|
+
supported_versions = self.supported_versions
|
70
|
+
return version < supported_versions.first if supported_versions.any?
|
71
|
+
|
72
|
+
false
|
73
|
+
end
|
74
|
+
|
75
|
+
# Indicates if the package manager supports later versions beyond those listed in supported_versions.
|
76
|
+
# By default, returns false if not overridden in the subclass.
|
77
|
+
# @example
|
78
|
+
# package_manager.support_later_versions? #=> true
|
79
|
+
sig { returns(T::Boolean) }
|
80
|
+
def support_later_versions?
|
81
|
+
false
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
@@ -12,6 +12,7 @@ require "dependabot/logger"
|
|
12
12
|
require "dependabot/metadata_finders"
|
13
13
|
require "dependabot/pull_request_creator"
|
14
14
|
require "dependabot/pull_request_creator/message"
|
15
|
+
require "dependabot/notices"
|
15
16
|
|
16
17
|
# rubocop:disable Metrics/ClassLength
|
17
18
|
module Dependabot
|
@@ -64,6 +65,9 @@ module Dependabot
|
|
64
65
|
sig { returns(T::Array[T::Hash[String, String]]) }
|
65
66
|
attr_reader :ignore_conditions
|
66
67
|
|
68
|
+
sig { returns(T.nilable(T::Array[Dependabot::Notice])) }
|
69
|
+
attr_reader :notices
|
70
|
+
|
67
71
|
TRUNCATED_MSG = "...\n\n_Description has been truncated_"
|
68
72
|
|
69
73
|
sig do
|
@@ -80,7 +84,8 @@ module Dependabot
|
|
80
84
|
dependency_group: T.nilable(Dependabot::DependencyGroup),
|
81
85
|
pr_message_max_length: T.nilable(Integer),
|
82
86
|
pr_message_encoding: T.nilable(Encoding),
|
83
|
-
ignore_conditions: T::Array[T::Hash[String, String]]
|
87
|
+
ignore_conditions: T::Array[T::Hash[String, String]],
|
88
|
+
notices: T.nilable(T::Array[Dependabot::Notice])
|
84
89
|
)
|
85
90
|
.void
|
86
91
|
end
|
@@ -88,7 +93,8 @@ module Dependabot
|
|
88
93
|
pr_message_header: nil, pr_message_footer: nil,
|
89
94
|
commit_message_options: {}, vulnerabilities_fixed: {},
|
90
95
|
github_redirection_service: DEFAULT_GITHUB_REDIRECTION_SERVICE,
|
91
|
-
dependency_group: nil, pr_message_max_length: nil, pr_message_encoding: nil,
|
96
|
+
dependency_group: nil, pr_message_max_length: nil, pr_message_encoding: nil,
|
97
|
+
ignore_conditions: [], notices: nil)
|
92
98
|
@dependencies = dependencies
|
93
99
|
@files = files
|
94
100
|
@source = source
|
@@ -102,6 +108,7 @@ module Dependabot
|
|
102
108
|
@pr_message_max_length = pr_message_max_length
|
103
109
|
@pr_message_encoding = pr_message_encoding
|
104
110
|
@ignore_conditions = ignore_conditions
|
111
|
+
@notices = notices
|
105
112
|
end
|
106
113
|
|
107
114
|
sig { params(pr_message_max_length: Integer).returns(Integer) }
|
@@ -119,7 +126,8 @@ module Dependabot
|
|
119
126
|
|
120
127
|
sig { returns(String) }
|
121
128
|
def pr_message
|
122
|
-
msg = "#{
|
129
|
+
msg = "#{pr_notices}" \
|
130
|
+
"#{suffixed_pr_message_header}" \
|
123
131
|
"#{commit_message_intro}" \
|
124
132
|
"#{metadata_cascades}" \
|
125
133
|
"#{ignore_conditions_table}" \
|
@@ -131,6 +139,17 @@ module Dependabot
|
|
131
139
|
suffixed_pr_message_header + prefixed_pr_message_footer
|
132
140
|
end
|
133
141
|
|
142
|
+
sig { returns(T.nilable(String)) }
|
143
|
+
def pr_notices
|
144
|
+
notices = @notices || []
|
145
|
+
unique_messages = notices.filter_map do |notice|
|
146
|
+
Dependabot::Notice.markdown_from_description(notice) if notice.show_in_pr
|
147
|
+
end.uniq
|
148
|
+
|
149
|
+
message = unique_messages.join("\n\n")
|
150
|
+
message.empty? ? nil : message
|
151
|
+
end
|
152
|
+
|
134
153
|
# Truncate PR message as determined by the pr_message_max_length and pr_message_encoding instance variables
|
135
154
|
# The encoding is used when calculating length, all messages are returned as ruby UTF_8 encoded string
|
136
155
|
sig { params(msg: String).returns(String) }
|
@@ -316,6 +335,8 @@ module Dependabot
|
|
316
335
|
def suffixed_pr_message_header
|
317
336
|
return "" unless pr_message_header
|
318
337
|
|
338
|
+
return "#{pr_message_header}\n\n" if notices
|
339
|
+
|
319
340
|
"#{pr_message_header}\n\n"
|
320
341
|
end
|
321
342
|
|
@@ -0,0 +1,131 @@
|
|
1
|
+
# typed: strong
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
require "sorbet-runtime"
|
5
|
+
|
6
|
+
# See https://semver.org/spec/v2.0.0.html for semver 2 details
|
7
|
+
#
|
8
|
+
module Dependabot
|
9
|
+
class SemVersion2
|
10
|
+
extend T::Sig
|
11
|
+
extend T::Helpers
|
12
|
+
include Comparable
|
13
|
+
|
14
|
+
SEMVER2_REGEX = /^
|
15
|
+
(0|[1-9]\d*)\. # major
|
16
|
+
(0|[1-9]\d*)\. # minor
|
17
|
+
(0|[1-9]\d*) # patch
|
18
|
+
(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))? # pre release
|
19
|
+
(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))? # build metadata
|
20
|
+
$/x
|
21
|
+
|
22
|
+
sig { returns(String) }
|
23
|
+
attr_accessor :major
|
24
|
+
|
25
|
+
sig { returns(String) }
|
26
|
+
attr_accessor :minor
|
27
|
+
|
28
|
+
sig { returns(String) }
|
29
|
+
attr_accessor :patch
|
30
|
+
|
31
|
+
sig { returns(T.nilable(String)) }
|
32
|
+
attr_accessor :build
|
33
|
+
|
34
|
+
sig { returns(T.nilable(String)) }
|
35
|
+
attr_accessor :prerelease
|
36
|
+
|
37
|
+
sig { params(version: String).void }
|
38
|
+
def initialize(version)
|
39
|
+
tokens = parse(version)
|
40
|
+
@major = T.let(T.must(tokens[:major]), String)
|
41
|
+
@minor = T.let(T.must(tokens[:minor]), String)
|
42
|
+
@patch = T.let(T.must(tokens[:patch]), String)
|
43
|
+
@build = T.let(tokens[:build], T.nilable(String))
|
44
|
+
@prerelease = T.let(tokens[:prerelease], T.nilable(String))
|
45
|
+
end
|
46
|
+
|
47
|
+
sig { returns(T::Boolean) }
|
48
|
+
def prerelease?
|
49
|
+
!!prerelease
|
50
|
+
end
|
51
|
+
|
52
|
+
sig { returns(String) }
|
53
|
+
def to_s
|
54
|
+
value = [major, minor, patch].join(".")
|
55
|
+
value += "-#{prerelease}" if prerelease
|
56
|
+
value += "+#{build}" if build
|
57
|
+
value
|
58
|
+
end
|
59
|
+
|
60
|
+
sig { returns(String) }
|
61
|
+
def inspect
|
62
|
+
"#<#{self.class} #{self}>"
|
63
|
+
end
|
64
|
+
|
65
|
+
sig { params(other: ::Dependabot::SemVersion2).returns(T::Boolean) }
|
66
|
+
def eql?(other)
|
67
|
+
other.is_a?(self.class) && to_s == other.to_s
|
68
|
+
end
|
69
|
+
|
70
|
+
sig { params(other: ::Dependabot::SemVersion2).returns(Integer) }
|
71
|
+
def <=>(other)
|
72
|
+
result = major.to_i <=> other.major.to_i
|
73
|
+
return result unless result.zero?
|
74
|
+
|
75
|
+
result = minor.to_i <=> other.minor.to_i
|
76
|
+
return result unless result.zero?
|
77
|
+
|
78
|
+
result = patch.to_i <=> other.patch.to_i
|
79
|
+
return result unless result.zero?
|
80
|
+
|
81
|
+
compare_prereleases(prerelease, other.prerelease)
|
82
|
+
end
|
83
|
+
|
84
|
+
sig { params(version: T.nilable(String)).returns(T::Boolean) }
|
85
|
+
def self.correct?(version)
|
86
|
+
return false if version.nil?
|
87
|
+
|
88
|
+
version.match?(SEMVER2_REGEX)
|
89
|
+
end
|
90
|
+
|
91
|
+
private
|
92
|
+
|
93
|
+
sig { params(version: String).returns(T::Hash[Symbol, T.nilable(String)]) }
|
94
|
+
def parse(version)
|
95
|
+
match = version.match(SEMVER2_REGEX)
|
96
|
+
raise ArgumentError, "Malformed version number string #{version}" unless match
|
97
|
+
|
98
|
+
major, minor, patch, prerelease, build = match.captures
|
99
|
+
|
100
|
+
{ major: major, minor: minor, patch: patch, prerelease: prerelease, build: build }
|
101
|
+
end
|
102
|
+
|
103
|
+
sig { params(prerelease1: T.nilable(String), prerelease2: T.nilable(String)).returns(Integer) }
|
104
|
+
def compare_prereleases(prerelease1, prerelease2) # rubocop:disable Metrics/PerceivedComplexity
|
105
|
+
return 0 if prerelease1.nil? && prerelease2.nil?
|
106
|
+
return -1 if prerelease2.nil?
|
107
|
+
return 1 if prerelease1.nil?
|
108
|
+
|
109
|
+
prerelease1_tokens = prerelease1.split(".")
|
110
|
+
prerelease2_tokens = prerelease2.split(".")
|
111
|
+
|
112
|
+
prerelease1_tokens.zip(prerelease2_tokens) do |t1, t2|
|
113
|
+
return 1 if t2.nil? # t1 is more specific e.g. 1.0.0-rc1.1 vs 1.0.0-rc1
|
114
|
+
|
115
|
+
if t1 =~ /^\d+$/ && t2 =~ /^\d+$/
|
116
|
+
# t1 and t2 are both ints so compare them as such
|
117
|
+
a = t1.to_i
|
118
|
+
b = t2.to_i
|
119
|
+
compare = a <=> b
|
120
|
+
return compare unless compare.zero?
|
121
|
+
end
|
122
|
+
|
123
|
+
comp = t1 <=> t2
|
124
|
+
return T.must(comp) unless T.must(comp).zero?
|
125
|
+
end
|
126
|
+
|
127
|
+
# prereleases are equal or prerelease2 is more specific e.g. 1.0.0-rc1 vs 1.0.0-rc1.1
|
128
|
+
prerelease1_tokens.length == prerelease2_tokens.length ? 0 : -1
|
129
|
+
end
|
130
|
+
end
|
131
|
+
end
|
data/lib/dependabot.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dependabot-common
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.273.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dependabot
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-08-
|
11
|
+
date: 2024-08-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: aws-sdk-codecommit
|
@@ -551,6 +551,8 @@ files:
|
|
551
551
|
- lib/dependabot/metadata_finders/base/changelog_pruner.rb
|
552
552
|
- lib/dependabot/metadata_finders/base/commits_finder.rb
|
553
553
|
- lib/dependabot/metadata_finders/base/release_finder.rb
|
554
|
+
- lib/dependabot/notices.rb
|
555
|
+
- lib/dependabot/package_manager.rb
|
554
556
|
- lib/dependabot/pull_request_creator.rb
|
555
557
|
- lib/dependabot/pull_request_creator/azure.rb
|
556
558
|
- lib/dependabot/pull_request_creator/bitbucket.rb
|
@@ -578,6 +580,7 @@ files:
|
|
578
580
|
- lib/dependabot/requirements_update_strategy.rb
|
579
581
|
- lib/dependabot/requirements_updater/base.rb
|
580
582
|
- lib/dependabot/security_advisory.rb
|
583
|
+
- lib/dependabot/sem_version2.rb
|
581
584
|
- lib/dependabot/shared_helpers.rb
|
582
585
|
- lib/dependabot/simple_instrumentor.rb
|
583
586
|
- lib/dependabot/source.rb
|
@@ -597,7 +600,7 @@ licenses:
|
|
597
600
|
- MIT
|
598
601
|
metadata:
|
599
602
|
bug_tracker_uri: https://github.com/dependabot/dependabot-core/issues
|
600
|
-
changelog_uri: https://github.com/dependabot/dependabot-core/releases/tag/v0.
|
603
|
+
changelog_uri: https://github.com/dependabot/dependabot-core/releases/tag/v0.273.0
|
601
604
|
post_install_message:
|
602
605
|
rdoc_options: []
|
603
606
|
require_paths:
|