dependabot-sbt 0.377.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.
@@ -0,0 +1,76 @@
1
+ # typed: strong
2
+ # frozen_string_literal: true
3
+
4
+ require "sorbet-runtime"
5
+ require "dependabot/package/package_latest_version_finder"
6
+ require "dependabot/package/release_cooldown_options"
7
+ require "dependabot/update_checkers/version_filters"
8
+ require "dependabot/maven/shared/base_version_finder"
9
+ require "dependabot/sbt/update_checker"
10
+ require "dependabot/sbt/package/package_details_fetcher"
11
+
12
+ module Dependabot
13
+ module Sbt
14
+ class UpdateChecker < Dependabot::UpdateCheckers::Base
15
+ class VersionFinder < Dependabot::Maven::Shared::BaseVersionFinder
16
+ extend T::Sig
17
+
18
+ sig do
19
+ params(
20
+ dependency: Dependabot::Dependency,
21
+ dependency_files: T::Array[Dependabot::DependencyFile],
22
+ credentials: T::Array[Dependabot::Credential],
23
+ ignored_versions: T::Array[String],
24
+ security_advisories: T::Array[Dependabot::SecurityAdvisory],
25
+ cooldown_options: T.nilable(Dependabot::Package::ReleaseCooldownOptions),
26
+ raise_on_ignored: T::Boolean
27
+ ).void
28
+ end
29
+ def initialize(
30
+ dependency:,
31
+ dependency_files:,
32
+ credentials:,
33
+ ignored_versions:,
34
+ security_advisories:,
35
+ cooldown_options: nil,
36
+ raise_on_ignored: false
37
+ )
38
+ @package_details_fetcher = T.let(nil, T.nilable(Package::PackageDetailsFetcher))
39
+ @package_details = T.let(nil, T.nilable(Dependabot::Package::PackageDetails))
40
+
41
+ super(
42
+ dependency: dependency,
43
+ dependency_files: dependency_files,
44
+ credentials: credentials,
45
+ ignored_versions: ignored_versions,
46
+ security_advisories: security_advisories,
47
+ cooldown_options: cooldown_options,
48
+ raise_on_ignored: raise_on_ignored,
49
+ options: {}
50
+ )
51
+ end
52
+
53
+ sig { override.returns(T.nilable(Dependabot::Package::PackageDetails)) }
54
+ def package_details
55
+ @package_details ||= package_details_fetcher.fetch
56
+ end
57
+
58
+ private
59
+
60
+ sig { override.params(version: Dependabot::Version).returns(T::Boolean) }
61
+ def released?(version)
62
+ package_details_fetcher.released?(version)
63
+ end
64
+
65
+ sig { returns(Package::PackageDetailsFetcher) }
66
+ def package_details_fetcher
67
+ @package_details_fetcher ||= Package::PackageDetailsFetcher.new(
68
+ dependency: dependency,
69
+ dependency_files: dependency_files,
70
+ credentials: credentials
71
+ )
72
+ end
73
+ end
74
+ end
75
+ end
76
+ end
@@ -0,0 +1,177 @@
1
+ # typed: strict
2
+ # frozen_string_literal: true
3
+
4
+ require "sorbet-runtime"
5
+ require "dependabot/update_checkers"
6
+ require "dependabot/update_checkers/base"
7
+ require "dependabot/sbt/file_parser"
8
+ require "dependabot/sbt/file_parser/property_value_finder"
9
+
10
+ module Dependabot
11
+ module Sbt
12
+ class UpdateChecker < Dependabot::UpdateCheckers::Base
13
+ extend T::Sig
14
+
15
+ require_relative "update_checker/requirements_updater"
16
+ require_relative "update_checker/version_finder"
17
+
18
+ sig { override.returns(T.nilable(Dependabot::Version)) }
19
+ def latest_version
20
+ latest_version_details&.fetch(:version)
21
+ end
22
+
23
+ sig { override.returns(T.nilable(Dependabot::Version)) }
24
+ def latest_resolvable_version
25
+ # SBT has no transitive dependency resolution constraints in manifest files.
26
+ # Return nil if version comes from a multi-dependency property (needs full unlock).
27
+ return nil if version_comes_from_multi_dependency_property?
28
+
29
+ latest_version
30
+ end
31
+
32
+ sig { override.returns(T.nilable(Dependabot::Version)) }
33
+ def lowest_security_fix_version
34
+ lowest_security_fix_version_details&.fetch(:version)
35
+ end
36
+
37
+ sig { override.returns(T.nilable(Dependabot::Version)) }
38
+ def lowest_resolvable_security_fix_version
39
+ return nil if version_comes_from_multi_dependency_property?
40
+
41
+ lowest_security_fix_version
42
+ end
43
+
44
+ sig { override.returns(T.nilable(Dependabot::Version)) }
45
+ def latest_resolvable_version_with_no_unlock
46
+ # SBT uses exact versions in build files, so no constraint resolution needed.
47
+ nil
48
+ end
49
+
50
+ sig { override.returns(T::Array[T::Hash[Symbol, T.untyped]]) }
51
+ def updated_requirements
52
+ property_names =
53
+ declarations_using_a_property
54
+ .filter_map { |req| req.dig(:metadata, :property_name) }
55
+
56
+ RequirementsUpdater.new(
57
+ requirements: dependency.requirements,
58
+ latest_version: preferred_resolvable_version&.to_s,
59
+ source_url: preferred_version_details&.fetch(:source_url),
60
+ properties_to_update: property_names
61
+ ).updated_requirements
62
+ end
63
+
64
+ sig { override.returns(T::Boolean) }
65
+ def requirements_unlocked_or_can_be?
66
+ # If any requirement uses a val we couldn't resolve, we can't update
67
+ !dependency.version&.include?("${")
68
+ end
69
+
70
+ private
71
+
72
+ sig { override.returns(T::Boolean) }
73
+ def latest_version_resolvable_with_full_unlock?
74
+ return false unless version_comes_from_multi_dependency_property?
75
+
76
+ # Full unlock via property updates can be added later
77
+ false
78
+ end
79
+
80
+ sig { override.returns(T::Array[Dependabot::Dependency]) }
81
+ def updated_dependencies_after_full_unlock
82
+ []
83
+ end
84
+
85
+ sig { override.returns(T::Boolean) }
86
+ def numeric_version_up_to_date?
87
+ return false unless version_class.correct?(dependency.version)
88
+
89
+ super
90
+ end
91
+
92
+ sig { override.params(requirements_to_unlock: T.nilable(Symbol)).returns(T::Boolean) }
93
+ def numeric_version_can_update?(requirements_to_unlock:)
94
+ return false unless version_class.correct?(dependency.version)
95
+
96
+ super
97
+ end
98
+
99
+ sig { returns(T.nilable(T::Hash[T.untyped, T.untyped])) }
100
+ def preferred_version_details
101
+ return lowest_security_fix_version_details if vulnerable?
102
+
103
+ latest_version_details
104
+ end
105
+
106
+ sig { returns(T.nilable(T::Hash[T.untyped, T.untyped])) }
107
+ def latest_version_details
108
+ version_finder.latest_version_details
109
+ end
110
+
111
+ sig { returns(T.nilable(T::Hash[T.untyped, T.untyped])) }
112
+ def lowest_security_fix_version_details
113
+ version_finder.lowest_security_fix_version_details
114
+ end
115
+
116
+ sig { returns(VersionFinder) }
117
+ def version_finder
118
+ @version_finder ||= T.let(
119
+ VersionFinder.new(
120
+ dependency: dependency,
121
+ dependency_files: dependency_files,
122
+ credentials: credentials,
123
+ ignored_versions: ignored_versions,
124
+ cooldown_options: update_cooldown,
125
+ raise_on_ignored: raise_on_ignored,
126
+ security_advisories: security_advisories
127
+ ),
128
+ T.nilable(VersionFinder)
129
+ )
130
+ end
131
+
132
+ sig { returns(T::Boolean) }
133
+ def version_comes_from_multi_dependency_property?
134
+ declarations_using_a_property.any? do |requirement|
135
+ property_name = requirement.dig(:metadata, :property_name)
136
+ property_source = requirement.dig(:metadata, :property_source)
137
+
138
+ next false unless property_name
139
+
140
+ all_property_based_dependencies.any? do |dep|
141
+ next false if dep.name == dependency.name
142
+
143
+ dep.requirements.any? do |req|
144
+ next unless req.dig(:metadata, :property_name) == property_name
145
+
146
+ req.dig(:metadata, :property_source) == property_source
147
+ end
148
+ end
149
+ end
150
+ end
151
+
152
+ sig { returns(T::Array[T::Hash[Symbol, T.untyped]]) }
153
+ def declarations_using_a_property
154
+ @declarations_using_a_property ||= T.let(
155
+ dependency.requirements
156
+ .select { |req| req.dig(:metadata, :property_name) },
157
+ T.nilable(T::Array[T::Hash[Symbol, T.untyped]])
158
+ )
159
+ end
160
+
161
+ sig { returns(T::Array[Dependabot::Dependency]) }
162
+ def all_property_based_dependencies
163
+ @all_property_based_dependencies ||= T.let(
164
+ Sbt::FileParser.new(
165
+ dependency_files: dependency_files,
166
+ source: nil
167
+ ).parse.select do |dep|
168
+ dep.requirements.any? { |req| req.dig(:metadata, :property_name) }
169
+ end,
170
+ T.nilable(T::Array[Dependabot::Dependency])
171
+ )
172
+ end
173
+ end
174
+ end
175
+ end
176
+
177
+ Dependabot::UpdateCheckers.register("sbt", Dependabot::Sbt::UpdateChecker)
@@ -0,0 +1,21 @@
1
+ # typed: strong
2
+ # frozen_string_literal: true
3
+
4
+ require "sorbet-runtime"
5
+
6
+ require "dependabot/maven/version"
7
+ require "dependabot/utils"
8
+
9
+ module Dependabot
10
+ module Sbt
11
+ # SBT resolves artifacts from Maven repositories and uses the same
12
+ # version ordering specification as Maven.
13
+ class Version < Dependabot::Maven::Version
14
+ extend T::Sig
15
+
16
+ VERSION_PATTERN = T.let(Dependabot::Maven::Version::VERSION_PATTERN, String)
17
+ end
18
+ end
19
+ end
20
+
21
+ Dependabot::Utils.register_version_class("sbt", Dependabot::Sbt::Version)
@@ -0,0 +1,19 @@
1
+ # typed: strong
2
+ # frozen_string_literal: true
3
+
4
+ # These all need to be required so the various classes can be registered in a
5
+ # lookup table of package manager names to concrete classes.
6
+ require "dependabot/sbt/file_fetcher"
7
+ require "dependabot/sbt/file_parser"
8
+ require "dependabot/sbt/update_checker"
9
+ require "dependabot/sbt/file_updater"
10
+ require "dependabot/sbt/metadata_finder"
11
+ require "dependabot/sbt/version"
12
+ require "dependabot/sbt/requirement"
13
+
14
+ require "dependabot/pull_request_creator/labeler"
15
+ Dependabot::PullRequestCreator::Labeler
16
+ .register_label_details("sbt", name: "sbt", colour: "000000")
17
+
18
+ require "dependabot/dependency"
19
+ Dependabot::Dependency.register_production_check("sbt", ->(_) { true })
metadata ADDED
@@ -0,0 +1,298 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: dependabot-sbt
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.377.0
5
+ platform: ruby
6
+ authors:
7
+ - Dependabot
8
+ bindir: bin
9
+ cert_chain: []
10
+ date: 1980-01-02 00:00:00.000000000 Z
11
+ dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: dependabot-common
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - '='
17
+ - !ruby/object:Gem::Version
18
+ version: 0.377.0
19
+ type: :runtime
20
+ prerelease: false
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - '='
24
+ - !ruby/object:Gem::Version
25
+ version: 0.377.0
26
+ - !ruby/object:Gem::Dependency
27
+ name: dependabot-maven
28
+ requirement: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - '='
31
+ - !ruby/object:Gem::Version
32
+ version: 0.377.0
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - '='
38
+ - !ruby/object:Gem::Version
39
+ version: 0.377.0
40
+ - !ruby/object:Gem::Dependency
41
+ name: debug
42
+ requirement: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - "~>"
45
+ - !ruby/object:Gem::Version
46
+ version: '1.9'
47
+ type: :development
48
+ prerelease: false
49
+ version_requirements: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - "~>"
52
+ - !ruby/object:Gem::Version
53
+ version: '1.9'
54
+ - !ruby/object:Gem::Dependency
55
+ name: gpgme
56
+ requirement: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - "~>"
59
+ - !ruby/object:Gem::Version
60
+ version: '2.0'
61
+ type: :development
62
+ prerelease: false
63
+ version_requirements: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - "~>"
66
+ - !ruby/object:Gem::Version
67
+ version: '2.0'
68
+ - !ruby/object:Gem::Dependency
69
+ name: rake
70
+ requirement: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - "~>"
73
+ - !ruby/object:Gem::Version
74
+ version: '13.2'
75
+ type: :development
76
+ prerelease: false
77
+ version_requirements: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - "~>"
80
+ - !ruby/object:Gem::Version
81
+ version: '13.2'
82
+ - !ruby/object:Gem::Dependency
83
+ name: rspec
84
+ requirement: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - "~>"
87
+ - !ruby/object:Gem::Version
88
+ version: '3.12'
89
+ type: :development
90
+ prerelease: false
91
+ version_requirements: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - "~>"
94
+ - !ruby/object:Gem::Version
95
+ version: '3.12'
96
+ - !ruby/object:Gem::Dependency
97
+ name: rspec-its
98
+ requirement: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - "~>"
101
+ - !ruby/object:Gem::Version
102
+ version: '2.0'
103
+ type: :development
104
+ prerelease: false
105
+ version_requirements: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - "~>"
108
+ - !ruby/object:Gem::Version
109
+ version: '2.0'
110
+ - !ruby/object:Gem::Dependency
111
+ name: rspec-sorbet
112
+ requirement: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - "~>"
115
+ - !ruby/object:Gem::Version
116
+ version: '1.9'
117
+ type: :development
118
+ prerelease: false
119
+ version_requirements: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - "~>"
122
+ - !ruby/object:Gem::Version
123
+ version: '1.9'
124
+ - !ruby/object:Gem::Dependency
125
+ name: rubocop
126
+ requirement: !ruby/object:Gem::Requirement
127
+ requirements:
128
+ - - "~>"
129
+ - !ruby/object:Gem::Version
130
+ version: '1.80'
131
+ type: :development
132
+ prerelease: false
133
+ version_requirements: !ruby/object:Gem::Requirement
134
+ requirements:
135
+ - - "~>"
136
+ - !ruby/object:Gem::Version
137
+ version: '1.80'
138
+ - !ruby/object:Gem::Dependency
139
+ name: rubocop-performance
140
+ requirement: !ruby/object:Gem::Requirement
141
+ requirements:
142
+ - - "~>"
143
+ - !ruby/object:Gem::Version
144
+ version: '1.26'
145
+ type: :development
146
+ prerelease: false
147
+ version_requirements: !ruby/object:Gem::Requirement
148
+ requirements:
149
+ - - "~>"
150
+ - !ruby/object:Gem::Version
151
+ version: '1.26'
152
+ - !ruby/object:Gem::Dependency
153
+ name: rubocop-rspec
154
+ requirement: !ruby/object:Gem::Requirement
155
+ requirements:
156
+ - - "~>"
157
+ - !ruby/object:Gem::Version
158
+ version: '3.7'
159
+ type: :development
160
+ prerelease: false
161
+ version_requirements: !ruby/object:Gem::Requirement
162
+ requirements:
163
+ - - "~>"
164
+ - !ruby/object:Gem::Version
165
+ version: '3.7'
166
+ - !ruby/object:Gem::Dependency
167
+ name: rubocop-sorbet
168
+ requirement: !ruby/object:Gem::Requirement
169
+ requirements:
170
+ - - "~>"
171
+ - !ruby/object:Gem::Version
172
+ version: '0.10'
173
+ type: :development
174
+ prerelease: false
175
+ version_requirements: !ruby/object:Gem::Requirement
176
+ requirements:
177
+ - - "~>"
178
+ - !ruby/object:Gem::Version
179
+ version: '0.10'
180
+ - !ruby/object:Gem::Dependency
181
+ name: simplecov
182
+ requirement: !ruby/object:Gem::Requirement
183
+ requirements:
184
+ - - "~>"
185
+ - !ruby/object:Gem::Version
186
+ version: '0.22'
187
+ type: :development
188
+ prerelease: false
189
+ version_requirements: !ruby/object:Gem::Requirement
190
+ requirements:
191
+ - - "~>"
192
+ - !ruby/object:Gem::Version
193
+ version: '0.22'
194
+ - !ruby/object:Gem::Dependency
195
+ name: turbo_tests
196
+ requirement: !ruby/object:Gem::Requirement
197
+ requirements:
198
+ - - "~>"
199
+ - !ruby/object:Gem::Version
200
+ version: 2.2.5
201
+ type: :development
202
+ prerelease: false
203
+ version_requirements: !ruby/object:Gem::Requirement
204
+ requirements:
205
+ - - "~>"
206
+ - !ruby/object:Gem::Version
207
+ version: 2.2.5
208
+ - !ruby/object:Gem::Dependency
209
+ name: vcr
210
+ requirement: !ruby/object:Gem::Requirement
211
+ requirements:
212
+ - - "~>"
213
+ - !ruby/object:Gem::Version
214
+ version: '6.1'
215
+ type: :development
216
+ prerelease: false
217
+ version_requirements: !ruby/object:Gem::Requirement
218
+ requirements:
219
+ - - "~>"
220
+ - !ruby/object:Gem::Version
221
+ version: '6.1'
222
+ - !ruby/object:Gem::Dependency
223
+ name: webmock
224
+ requirement: !ruby/object:Gem::Requirement
225
+ requirements:
226
+ - - "~>"
227
+ - !ruby/object:Gem::Version
228
+ version: '3.25'
229
+ type: :development
230
+ prerelease: false
231
+ version_requirements: !ruby/object:Gem::Requirement
232
+ requirements:
233
+ - - "~>"
234
+ - !ruby/object:Gem::Version
235
+ version: '3.25'
236
+ - !ruby/object:Gem::Dependency
237
+ name: webrick
238
+ requirement: !ruby/object:Gem::Requirement
239
+ requirements:
240
+ - - "~>"
241
+ - !ruby/object:Gem::Version
242
+ version: '1.9'
243
+ type: :development
244
+ prerelease: false
245
+ version_requirements: !ruby/object:Gem::Requirement
246
+ requirements:
247
+ - - "~>"
248
+ - !ruby/object:Gem::Version
249
+ version: '1.9'
250
+ description: Dependabot-Sbt provides support for bumping Sbt dependencies via Dependabot.
251
+ If you want support for multiple package managers, you probably want the meta-gem
252
+ dependabot-omnibus.
253
+ email: opensource@github.com
254
+ executables: []
255
+ extensions: []
256
+ extra_rdoc_files: []
257
+ files:
258
+ - lib/dependabot/sbt.rb
259
+ - lib/dependabot/sbt/file_fetcher.rb
260
+ - lib/dependabot/sbt/file_parser.rb
261
+ - lib/dependabot/sbt/file_parser/property_value_finder.rb
262
+ - lib/dependabot/sbt/file_parser/repositories_finder.rb
263
+ - lib/dependabot/sbt/file_updater.rb
264
+ - lib/dependabot/sbt/file_updater/property_value_updater.rb
265
+ - lib/dependabot/sbt/language.rb
266
+ - lib/dependabot/sbt/metadata_finder.rb
267
+ - lib/dependabot/sbt/native_helpers.rb
268
+ - lib/dependabot/sbt/package/package_details_fetcher.rb
269
+ - lib/dependabot/sbt/package_manager.rb
270
+ - lib/dependabot/sbt/requirement.rb
271
+ - lib/dependabot/sbt/update_checker.rb
272
+ - lib/dependabot/sbt/update_checker/requirements_updater.rb
273
+ - lib/dependabot/sbt/update_checker/version_finder.rb
274
+ - lib/dependabot/sbt/version.rb
275
+ homepage: https://github.com/dependabot/dependabot-core
276
+ licenses:
277
+ - MIT
278
+ metadata:
279
+ bug_tracker_uri: https://github.com/dependabot/dependabot-core/issues
280
+ changelog_uri: https://github.com/dependabot/dependabot-core/releases/tag/v0.377.0
281
+ rdoc_options: []
282
+ require_paths:
283
+ - lib
284
+ required_ruby_version: !ruby/object:Gem::Requirement
285
+ requirements:
286
+ - - ">="
287
+ - !ruby/object:Gem::Version
288
+ version: 3.3.0
289
+ required_rubygems_version: !ruby/object:Gem::Requirement
290
+ requirements:
291
+ - - ">="
292
+ - !ruby/object:Gem::Version
293
+ version: 3.3.0
294
+ requirements: []
295
+ rubygems_version: 3.7.2
296
+ specification_version: 4
297
+ summary: Provides Dependabot support for Sbt
298
+ test_files: []