dependabot-bazel 0.344.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,186 @@
1
+ # typed: strong
2
+ # frozen_string_literal: true
3
+
4
+ require "time"
5
+ require "dependabot/update_checkers"
6
+ require "dependabot/update_checkers/base"
7
+ require "dependabot/bazel/version"
8
+ require "dependabot/package/package_release"
9
+
10
+ module Dependabot
11
+ module Bazel
12
+ class UpdateChecker < Dependabot::UpdateCheckers::Base
13
+ extend T::Sig
14
+
15
+ require_relative "update_checker/requirements_updater"
16
+ require_relative "update_checker/registry_client"
17
+
18
+ sig { override.returns(T.nilable(T.any(String, Gem::Version))) }
19
+ def latest_version
20
+ @latest_version ||= T.let(
21
+ fetch_latest_version,
22
+ T.nilable(T.any(String, Gem::Version))
23
+ )
24
+ end
25
+
26
+ sig { override.returns(T.nilable(T.any(String, Gem::Version))) }
27
+ def latest_resolvable_version
28
+ latest_version
29
+ end
30
+
31
+ sig { override.returns(T.nilable(String)) }
32
+ def latest_resolvable_version_with_no_unlock
33
+ nil
34
+ end
35
+
36
+ sig { override.returns(T::Array[T::Hash[Symbol, T.untyped]]) }
37
+ def updated_requirements
38
+ return dependency.requirements unless latest_version
39
+
40
+ RequirementsUpdater.new(
41
+ requirements: dependency.requirements,
42
+ latest_version: latest_version.to_s
43
+ ).updated_requirements
44
+ end
45
+
46
+ sig { returns(T.class_of(Dependabot::Bazel::Version)) }
47
+ def version_class
48
+ Dependabot::Bazel::Version
49
+ end
50
+
51
+ private
52
+
53
+ sig { override.returns(T::Boolean) }
54
+ def latest_version_resolvable_with_full_unlock?
55
+ !latest_version.nil?
56
+ end
57
+
58
+ sig { override.returns(T::Array[Dependabot::Dependency]) }
59
+ def updated_dependencies_after_full_unlock
60
+ return [] unless latest_version
61
+
62
+ [
63
+ Dependabot::Dependency.new(
64
+ name: dependency.name,
65
+ version: latest_version.to_s,
66
+ requirements: updated_requirements,
67
+ previous_version: dependency.version,
68
+ previous_requirements: dependency.requirements,
69
+ package_manager: dependency.package_manager
70
+ )
71
+ ]
72
+ end
73
+
74
+ sig { returns(T.nilable(T.any(String, Gem::Version))) }
75
+ def fetch_latest_version
76
+ return nil unless registry_client.get_metadata(dependency.name)
77
+
78
+ versions = registry_client.all_module_versions(dependency.name)
79
+ return nil if versions.empty?
80
+
81
+ filtered_versions = apply_cooldown_filter(versions)
82
+ return nil if filtered_versions.empty?
83
+
84
+ latest_version_string = filtered_versions.max_by { |v| version_sort_key(v) }
85
+ return nil unless latest_version_string
86
+
87
+ Dependabot::Bazel::Version.new(latest_version_string)
88
+ rescue Dependabot::DependabotError => e
89
+ Dependabot.logger.warn("Failed to fetch latest version for #{dependency.name}: #{e.message}")
90
+ nil
91
+ end
92
+
93
+ sig { returns(UpdateChecker::RegistryClient) }
94
+ def registry_client
95
+ @registry_client ||= T.let(
96
+ UpdateChecker::RegistryClient.new(credentials: credentials),
97
+ T.nilable(UpdateChecker::RegistryClient)
98
+ )
99
+ end
100
+
101
+ sig { params(versions: T::Array[String]).returns(T::Array[String]) }
102
+ def apply_cooldown_filter(versions)
103
+ return versions if should_skip_cooldown?
104
+
105
+ sorted_versions = versions.sort_by { |v| version_sort_key(v) }
106
+
107
+ filtered_versions = sorted_versions.reject do |version|
108
+ details = publication_detail(version)
109
+
110
+ next false unless details&.released_at
111
+
112
+ if cooldown_period?(T.must(details.released_at))
113
+ Dependabot.logger.info("Skipping version #{version} due to cooldown period")
114
+ true
115
+ else
116
+ false
117
+ end
118
+ end
119
+
120
+ filtered_versions
121
+ end
122
+
123
+ sig { params(version: String).returns(T.nilable(Dependabot::Package::PackageRelease)) }
124
+ def publication_detail(version)
125
+ return publication_details[version] if publication_details.key?(version)
126
+
127
+ details = get_version_publication_details(version)
128
+ publication_details[version] = details
129
+
130
+ details
131
+ end
132
+
133
+ sig { params(version: String).returns(T.nilable(Dependabot::Package::PackageRelease)) }
134
+ def get_version_publication_details(version)
135
+ release_date = registry_client.get_version_release_date(dependency.name, version)
136
+ return nil unless release_date
137
+
138
+ Dependabot::Package::PackageRelease.new(
139
+ version: Dependabot::Bazel::Version.new(version),
140
+ released_at: release_date,
141
+ latest: false,
142
+ yanked: false,
143
+ url: nil,
144
+ package_type: "bazel"
145
+ )
146
+ end
147
+
148
+ sig { returns(T::Hash[String, T.nilable(Dependabot::Package::PackageRelease)]) }
149
+ def publication_details
150
+ @publication_details ||= T.let(
151
+ {},
152
+ T.nilable(T::Hash[String, T.nilable(Dependabot::Package::PackageRelease)])
153
+ )
154
+ end
155
+
156
+ sig { params(release_date: Time).returns(T::Boolean) }
157
+ def cooldown_period?(release_date)
158
+ cooldown = update_cooldown
159
+ return false unless cooldown
160
+
161
+ cooldown_days = cooldown.default_days
162
+ (Time.now.to_i - release_date.to_i) < (cooldown_days * 24 * 60 * 60)
163
+ end
164
+
165
+ sig { returns(T::Boolean) }
166
+ def should_skip_cooldown?
167
+ cooldown = update_cooldown
168
+ cooldown.nil? || !cooldown_enabled? || !cooldown.included?(dependency.name)
169
+ end
170
+
171
+ sig { returns(T::Boolean) }
172
+ def cooldown_enabled?
173
+ true
174
+ end
175
+
176
+ sig { params(version: String).returns(T::Array[Integer]) }
177
+ def version_sort_key(version)
178
+ cleaned = version.gsub(/^v/, "")
179
+ parts = cleaned.split(".")
180
+ parts.map { |part| part.match?(/^\d+$/) ? part.to_i : 0 }
181
+ end
182
+ end
183
+ end
184
+ end
185
+
186
+ Dependabot::UpdateCheckers.register("bazel", Dependabot::Bazel::UpdateChecker)
@@ -0,0 +1,24 @@
1
+ # typed: strong
2
+ # frozen_string_literal: true
3
+
4
+ # NOTE: This file was scaffolded automatically but is OPTIONAL.
5
+ # If your ecosystem uses standard semantic versioning without special logic,
6
+ # you can safely delete this file and remove the require from lib/dependabot/bazel.rb
7
+
8
+ require "dependabot/version"
9
+ require "dependabot/utils"
10
+
11
+ module Dependabot
12
+ module Bazel
13
+ class Version < Dependabot::Version
14
+ extend T::Sig
15
+
16
+ # TODO: Implement custom version comparison logic if needed
17
+ # Example: Handle pre-release versions, build metadata, etc.
18
+ # If standard semantic versioning is sufficient, delete this file
19
+ end
20
+ end
21
+ end
22
+
23
+ Dependabot::Utils
24
+ .register_version_class("bazel", Dependabot::Bazel::Version)
@@ -0,0 +1,21 @@
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/bazel/language"
7
+ require "dependabot/bazel/package_manager"
8
+ require "dependabot/bazel/file_fetcher"
9
+ require "dependabot/bazel/file_parser"
10
+ require "dependabot/bazel/update_checker"
11
+ require "dependabot/bazel/file_updater"
12
+ require "dependabot/bazel/metadata_finder"
13
+ require "dependabot/bazel/version"
14
+ require "dependabot/bazel/requirement"
15
+
16
+ require "dependabot/pull_request_creator/labeler"
17
+ Dependabot::PullRequestCreator::Labeler
18
+ .register_label_details("bazel", name: "bazel", colour: "000000")
19
+
20
+ require "dependabot/dependency"
21
+ Dependabot::Dependency.register_production_check("bazel", ->(_) { true })
metadata ADDED
@@ -0,0 +1,283 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: dependabot-bazel
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.344.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.344.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.344.0
26
+ - !ruby/object:Gem::Dependency
27
+ name: debug
28
+ requirement: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - "~>"
31
+ - !ruby/object:Gem::Version
32
+ version: '1.9'
33
+ type: :development
34
+ prerelease: false
35
+ version_requirements: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '1.9'
40
+ - !ruby/object:Gem::Dependency
41
+ name: gpgme
42
+ requirement: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - "~>"
45
+ - !ruby/object:Gem::Version
46
+ version: '2.0'
47
+ type: :development
48
+ prerelease: false
49
+ version_requirements: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - "~>"
52
+ - !ruby/object:Gem::Version
53
+ version: '2.0'
54
+ - !ruby/object:Gem::Dependency
55
+ name: rake
56
+ requirement: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - "~>"
59
+ - !ruby/object:Gem::Version
60
+ version: '13.2'
61
+ type: :development
62
+ prerelease: false
63
+ version_requirements: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - "~>"
66
+ - !ruby/object:Gem::Version
67
+ version: '13.2'
68
+ - !ruby/object:Gem::Dependency
69
+ name: rspec
70
+ requirement: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - "~>"
73
+ - !ruby/object:Gem::Version
74
+ version: '3.12'
75
+ type: :development
76
+ prerelease: false
77
+ version_requirements: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - "~>"
80
+ - !ruby/object:Gem::Version
81
+ version: '3.12'
82
+ - !ruby/object:Gem::Dependency
83
+ name: rspec-its
84
+ requirement: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - "~>"
87
+ - !ruby/object:Gem::Version
88
+ version: '1.3'
89
+ type: :development
90
+ prerelease: false
91
+ version_requirements: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - "~>"
94
+ - !ruby/object:Gem::Version
95
+ version: '1.3'
96
+ - !ruby/object:Gem::Dependency
97
+ name: rspec-sorbet
98
+ requirement: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - "~>"
101
+ - !ruby/object:Gem::Version
102
+ version: '1.9'
103
+ type: :development
104
+ prerelease: false
105
+ version_requirements: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - "~>"
108
+ - !ruby/object:Gem::Version
109
+ version: '1.9'
110
+ - !ruby/object:Gem::Dependency
111
+ name: rubocop
112
+ requirement: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - "~>"
115
+ - !ruby/object:Gem::Version
116
+ version: '1.80'
117
+ type: :development
118
+ prerelease: false
119
+ version_requirements: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - "~>"
122
+ - !ruby/object:Gem::Version
123
+ version: '1.80'
124
+ - !ruby/object:Gem::Dependency
125
+ name: rubocop-performance
126
+ requirement: !ruby/object:Gem::Requirement
127
+ requirements:
128
+ - - "~>"
129
+ - !ruby/object:Gem::Version
130
+ version: '1.26'
131
+ type: :development
132
+ prerelease: false
133
+ version_requirements: !ruby/object:Gem::Requirement
134
+ requirements:
135
+ - - "~>"
136
+ - !ruby/object:Gem::Version
137
+ version: '1.26'
138
+ - !ruby/object:Gem::Dependency
139
+ name: rubocop-rspec
140
+ requirement: !ruby/object:Gem::Requirement
141
+ requirements:
142
+ - - "~>"
143
+ - !ruby/object:Gem::Version
144
+ version: '3.7'
145
+ type: :development
146
+ prerelease: false
147
+ version_requirements: !ruby/object:Gem::Requirement
148
+ requirements:
149
+ - - "~>"
150
+ - !ruby/object:Gem::Version
151
+ version: '3.7'
152
+ - !ruby/object:Gem::Dependency
153
+ name: rubocop-sorbet
154
+ requirement: !ruby/object:Gem::Requirement
155
+ requirements:
156
+ - - "~>"
157
+ - !ruby/object:Gem::Version
158
+ version: '0.10'
159
+ type: :development
160
+ prerelease: false
161
+ version_requirements: !ruby/object:Gem::Requirement
162
+ requirements:
163
+ - - "~>"
164
+ - !ruby/object:Gem::Version
165
+ version: '0.10'
166
+ - !ruby/object:Gem::Dependency
167
+ name: simplecov
168
+ requirement: !ruby/object:Gem::Requirement
169
+ requirements:
170
+ - - "~>"
171
+ - !ruby/object:Gem::Version
172
+ version: '0.22'
173
+ type: :development
174
+ prerelease: false
175
+ version_requirements: !ruby/object:Gem::Requirement
176
+ requirements:
177
+ - - "~>"
178
+ - !ruby/object:Gem::Version
179
+ version: '0.22'
180
+ - !ruby/object:Gem::Dependency
181
+ name: turbo_tests
182
+ requirement: !ruby/object:Gem::Requirement
183
+ requirements:
184
+ - - "~>"
185
+ - !ruby/object:Gem::Version
186
+ version: 2.2.5
187
+ type: :development
188
+ prerelease: false
189
+ version_requirements: !ruby/object:Gem::Requirement
190
+ requirements:
191
+ - - "~>"
192
+ - !ruby/object:Gem::Version
193
+ version: 2.2.5
194
+ - !ruby/object:Gem::Dependency
195
+ name: vcr
196
+ requirement: !ruby/object:Gem::Requirement
197
+ requirements:
198
+ - - "~>"
199
+ - !ruby/object:Gem::Version
200
+ version: '6.1'
201
+ type: :development
202
+ prerelease: false
203
+ version_requirements: !ruby/object:Gem::Requirement
204
+ requirements:
205
+ - - "~>"
206
+ - !ruby/object:Gem::Version
207
+ version: '6.1'
208
+ - !ruby/object:Gem::Dependency
209
+ name: webmock
210
+ requirement: !ruby/object:Gem::Requirement
211
+ requirements:
212
+ - - "~>"
213
+ - !ruby/object:Gem::Version
214
+ version: '3.25'
215
+ type: :development
216
+ prerelease: false
217
+ version_requirements: !ruby/object:Gem::Requirement
218
+ requirements:
219
+ - - "~>"
220
+ - !ruby/object:Gem::Version
221
+ version: '3.25'
222
+ - !ruby/object:Gem::Dependency
223
+ name: webrick
224
+ requirement: !ruby/object:Gem::Requirement
225
+ requirements:
226
+ - - "~>"
227
+ - !ruby/object:Gem::Version
228
+ version: '1.9'
229
+ type: :development
230
+ prerelease: false
231
+ version_requirements: !ruby/object:Gem::Requirement
232
+ requirements:
233
+ - - "~>"
234
+ - !ruby/object:Gem::Version
235
+ version: '1.9'
236
+ description: Dependabot-Bazel provides support for bumping Bazel dependencies via
237
+ Dependabot. If you want support for multiple package managers, you probably want
238
+ the meta-gem dependabot-omnibus.
239
+ email: opensource@github.com
240
+ executables: []
241
+ extensions: []
242
+ extra_rdoc_files: []
243
+ files:
244
+ - lib/dependabot/bazel.rb
245
+ - lib/dependabot/bazel/file_fetcher.rb
246
+ - lib/dependabot/bazel/file_parser.rb
247
+ - lib/dependabot/bazel/file_parser/starlark_parser.rb
248
+ - lib/dependabot/bazel/file_updater.rb
249
+ - lib/dependabot/bazel/file_updater/bzlmod_file_updater.rb
250
+ - lib/dependabot/bazel/file_updater/declaration_parser.rb
251
+ - lib/dependabot/bazel/file_updater/workspace_file_updater.rb
252
+ - lib/dependabot/bazel/language.rb
253
+ - lib/dependabot/bazel/metadata_finder.rb
254
+ - lib/dependabot/bazel/package_manager.rb
255
+ - lib/dependabot/bazel/requirement.rb
256
+ - lib/dependabot/bazel/update_checker.rb
257
+ - lib/dependabot/bazel/update_checker/registry_client.rb
258
+ - lib/dependabot/bazel/update_checker/requirements_updater.rb
259
+ - lib/dependabot/bazel/version.rb
260
+ homepage: https://github.com/dependabot/dependabot-core
261
+ licenses:
262
+ - MIT
263
+ metadata:
264
+ bug_tracker_uri: https://github.com/dependabot/dependabot-core/issues
265
+ changelog_uri: https://github.com/dependabot/dependabot-core/releases/tag/v0.344.0
266
+ rdoc_options: []
267
+ require_paths:
268
+ - lib
269
+ required_ruby_version: !ruby/object:Gem::Requirement
270
+ requirements:
271
+ - - ">="
272
+ - !ruby/object:Gem::Version
273
+ version: 3.3.0
274
+ required_rubygems_version: !ruby/object:Gem::Requirement
275
+ requirements:
276
+ - - ">="
277
+ - !ruby/object:Gem::Version
278
+ version: 3.3.0
279
+ requirements: []
280
+ rubygems_version: 3.6.9
281
+ specification_version: 4
282
+ summary: Provides Dependabot support for Bazel
283
+ test_files: []