dependabot-helm 0.392.0 → 0.393.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 55ca433812d4c1582f706b9bb3800d8b4830d0c572d9a33e66e5920ff1766348
4
- data.tar.gz: d4d043b94710e2dec098208e7d71d4cb0f5f02ece40a1a6e9ac2bf32d6432348
3
+ metadata.gz: 227be55b7636199d6e62c5e85b9b912d638aa975eb05b3e9e0f37b7c2b95c1a8
4
+ data.tar.gz: 691a554513a02c25655ab9e9694ba3708460d6372a02b563778d6bb6ebd2c38a
5
5
  SHA512:
6
- metadata.gz: 5ed94d0bb17927edc3b66fcc2d16530df5fdaa006a959cadd1c20a2ffe53d1499156f30fc5bc0d44b9250362b6fc101a0cc07a3beada6fd646baf7d2d0386841
7
- data.tar.gz: b913d6f21bc0ee3007bd276f7682683a7c59f9733f75786979d8877681ca33eb33f6e4ee8c511cc58917b15855ada43030d2b1aa6d8e504b9b8cfe678164569e
6
+ metadata.gz: 597be1cd5fda7853747cbfbc0ccaae9b5dda58d758cc59bd08e218d3c322eb1d7e5cbcc04fbe5138efca921588100d1410ea19c008bd3b5cb8f3dd160dc01633
7
+ data.tar.gz: b547fa89d94cef82b49555f6698b14831a06a8ccd87eacdf5cbdcf20705483021537c10810591f624c264f01851006844d90ffbb71cd0899c0ec2c650751a8d9
@@ -1,4 +1,4 @@
1
- # typed: strict
1
+ # typed: strong
2
2
  # frozen_string_literal: true
3
3
 
4
4
  require "dependabot/shared/shared_file_fetcher"
@@ -41,7 +41,7 @@ module Dependabot
41
41
  @chart_locks ||=
42
42
  T.let(
43
43
  repo_contents(raise_errors: false)
44
- .select { |f| f.type == "file" && f.name.casecmp(CHART_LOCK_FILENAME).zero? }
44
+ .select { |f| f.type == "file" && T.must(f.name.casecmp(CHART_LOCK_FILENAME)).zero? }
45
45
  .map { |f| fetch_file_from_host(f.name) },
46
46
  T.nilable(T::Array[DependencyFile])
47
47
  )
@@ -16,9 +16,12 @@ module Dependabot
16
16
  # docker-image path.
17
17
  #
18
18
  # NOTE: this class is intentionally NOT registered as the requirement class
19
- # for "helm" (that remains Docker::Requirement, used by the docker-image
20
- # path and ignore conditions). It is used explicitly by the range-preserving
21
- # requirements updater.
19
+ # for "helm" (that remains Docker::Requirement, used by the docker-image path
20
+ # and by Base, which compares against requirement_class.new(">= 0")). It is
21
+ # used explicitly by the range-preserving requirements updater, and by
22
+ # UpdateChecker#helm_ignore_requirements when filtering candidates, since
23
+ # Docker::Requirement#satisfied_by? is typed for Docker::Version and raises
24
+ # on a Helm::Version.
22
25
  class Requirement < Dependabot::Requirement
23
26
  extend T::Sig
24
27
 
@@ -235,16 +235,57 @@ module Dependabot
235
235
 
236
236
  sig { params(releases: T::Array[T::Hash[String, Object]]).returns(T::Array[T::Hash[String, Object]]) }
237
237
  def filter_valid_releases(releases)
238
- releases.reject do |release|
238
+ # Compare against current_version (the anchored floor) rather than
239
+ # dependency.version: for a range constraint (">=1.0.0 <2.0.0") the raw
240
+ # version string isn't a single parseable version.
241
+ newer = releases.reject do |release|
242
+ version_class.new(T.cast(release["version"], String)) <= current_version
243
+ end
244
+ filtered = newer.reject do |release|
239
245
  release_version = version_class.new(T.cast(release["version"], String))
240
- # Compare against current_version (the anchored floor) rather than
241
- # dependency.version: for a range constraint (">=1.0.0 <2.0.0") the raw
242
- # version string isn't a single parseable version.
243
- release_version <= current_version ||
244
- ignore_requirements.any? do |r|
245
- r.instance_of?(Dependabot::Requirement) && r.satisfied_by?(release_version)
246
- end
246
+ helm_ignore_requirements.any? { |r| r.satisfied_by?(release_version) }
247
247
  end
248
+
249
+ record_ignore_outcome(newer: newer.any?, surviving: filtered.any?)
250
+ filtered
251
+ end
252
+
253
+ # Ignore conditions have to be parsed by Helm::Requirement here, not by the
254
+ # requirement class registered for helm: that is Docker::Requirement, whose
255
+ # #satisfied_by? is typed for Docker::Version and raises on the
256
+ # Helm::Version candidates below.
257
+ #
258
+ # This deliberately does not override the public #ignore_requirements.
259
+ # Base#can_update? compares that list against
260
+ # requirement_class.new(">= 0"), and a Helm::Requirement there puts a
261
+ # Helm::Version up against a plain Gem::Version, which Helm::Version#<=>'s
262
+ # sig rejects. So the registered class keeps serving Base, and only the
263
+ # filtering below uses the Helm parser.
264
+ sig { returns(T::Array[Dependabot::Requirement]) }
265
+ def helm_ignore_requirements
266
+ @helm_ignore_requirements ||= T.let(
267
+ ignored_versions.flat_map { |req| Helm::Requirement.requirements_array(req) },
268
+ T.nilable(T::Array[Dependabot::Requirement])
269
+ )
270
+ end
271
+
272
+ # The updater needs AllVersionsIgnored to tell "everything newer was
273
+ # ignored" from "nothing newer exists", but the decision cannot be made
274
+ # in the filters: a source that filters everything out returns nil so the
275
+ # next source gets a turn, and its list may well contain a version this
276
+ # one never saw. So each source only records what it saw, and
277
+ # fetch_latest_chart_version raises once the sources are exhausted.
278
+ sig { params(newer: T::Boolean, surviving: T::Boolean).void }
279
+ def record_ignore_outcome(newer:, surviving:)
280
+ @all_newer_ignored = T.let(
281
+ (@all_newer_ignored || false) || (newer && !surviving),
282
+ T.nilable(T::Boolean)
283
+ )
284
+ end
285
+
286
+ sig { returns(T::Boolean) }
287
+ def all_newer_ignored?
288
+ @all_newer_ignored == true
248
289
  end
249
290
 
250
291
  sig { params(repo_url: String).returns(String) }
@@ -360,7 +401,15 @@ module Dependabot
360
401
  tag = fetch_latest_oci_tag(chart_name, repo_url) if repo_url&.start_with?("oci://")
361
402
  return tag if tag
362
403
 
363
- fetch_releases_from_index(chart_name, repo_url)
404
+ from_index = fetch_releases_from_index(chart_name, repo_url)
405
+ return from_index if from_index
406
+
407
+ # Every source came up empty. If at least one of them had newer versions
408
+ # that an ignore rule removed, that is a different answer than "there is
409
+ # nothing newer", and the updater handles the two differently.
410
+ raise Dependabot::AllVersionsIgnored if raise_on_ignored && all_newer_ignored?
411
+
412
+ nil
364
413
  end
365
414
 
366
415
  sig { params(chart_name: String, repo_url: String).returns(T.nilable(Gem::Version)) }
@@ -443,12 +492,13 @@ module Dependabot
443
492
 
444
493
  sig { params(all_versions: T::Array[String]).returns(T::Array[String]) }
445
494
  def filter_valid_versions(all_versions)
446
- all_versions.reject do |version|
447
- version_class.new(version) <= current_version ||
448
- ignore_requirements.any? do |r|
449
- r.instance_of?(Dependabot::Requirement) && r.satisfied_by?(version_class.new(version))
450
- end
495
+ newer = all_versions.reject { |version| version_class.new(version) <= current_version }
496
+ filtered = newer.reject do |version|
497
+ helm_ignore_requirements.any? { |r| r.satisfied_by?(version_class.new(version)) }
451
498
  end
499
+
500
+ record_ignore_outcome(newer: newer.any?, surviving: filtered.any?)
501
+ filtered
452
502
  end
453
503
 
454
504
  sig { returns(T.nilable(Gem::Version)) }
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dependabot-helm
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.392.0
4
+ version: 0.393.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dependabot
@@ -15,28 +15,28 @@ dependencies:
15
15
  requirements:
16
16
  - - '='
17
17
  - !ruby/object:Gem::Version
18
- version: 0.392.0
18
+ version: 0.393.0
19
19
  type: :runtime
20
20
  prerelease: false
21
21
  version_requirements: !ruby/object:Gem::Requirement
22
22
  requirements:
23
23
  - - '='
24
24
  - !ruby/object:Gem::Version
25
- version: 0.392.0
25
+ version: 0.393.0
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: dependabot-docker
28
28
  requirement: !ruby/object:Gem::Requirement
29
29
  requirements:
30
30
  - - '='
31
31
  - !ruby/object:Gem::Version
32
- version: 0.392.0
32
+ version: 0.393.0
33
33
  type: :runtime
34
34
  prerelease: false
35
35
  version_requirements: !ruby/object:Gem::Requirement
36
36
  requirements:
37
37
  - - '='
38
38
  - !ruby/object:Gem::Version
39
- version: 0.392.0
39
+ version: 0.393.0
40
40
  - !ruby/object:Gem::Dependency
41
41
  name: debug
42
42
  requirement: !ruby/object:Gem::Requirement
@@ -275,7 +275,7 @@ licenses:
275
275
  - MIT
276
276
  metadata:
277
277
  bug_tracker_uri: https://github.com/dependabot/dependabot-core/issues
278
- changelog_uri: https://github.com/dependabot/dependabot-core/releases/tag/v0.392.0
278
+ changelog_uri: https://github.com/dependabot/dependabot-core/releases/tag/v0.393.0
279
279
  rdoc_options: []
280
280
  require_paths:
281
281
  - lib