dependabot-common 0.291.0 → 0.292.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: cebae8e92439e403f480e7ffdcdb009582b7d5e196322fbdab8005048e77b05b
4
- data.tar.gz: 724f55170bf99cb90ef277776daed5415e6bdb6ed3dd30bde35e849711e7b68f
3
+ metadata.gz: bc0d7a7acc0f4dcb2e25a622e816fd82a11a1553eecf85e6ae1e442ce5750ffb
4
+ data.tar.gz: 29e3f86968cb122e49a26f2866ee3554cb07ddbbda305e17d02ee4cb10099282
5
5
  SHA512:
6
- metadata.gz: 127292cb53f8677d645cd9a51e89d16babcdacf8d5455c89e442c3022e728597142426ec88362e81082dbe8825ab5e4639f0f98600c644a7294ab9551d329931
7
- data.tar.gz: ff5478b081ce3e05babd84dbc2f6730260dd73e676c093655d7c5577f6e45c0b9db9d9da328c6fef5b485e4446f8e2da6d21db7d270692ac6f57e11051c8bd02
6
+ metadata.gz: 14e6659eaa880f07f1d2562d89ba71a5f581bcf431edcc49983bf7b6819be8567e0bd252606daa744e0c7d3523d2fd1970e22699b1053179f648009517ca332f
7
+ data.tar.gz: 47e39f274165302b4a2da440f242ffb7fd2e635c535666d3c09dc968090fbf7187c614ce1ed642f3ea472093820918675bb7ae465d4cad48a8c644d7ef5d6db8
@@ -32,6 +32,10 @@ module Dependabot
32
32
  normalizer = name_normaliser_for(dependency)
33
33
  dep_name = T.must(normalizer).call(dependency.name)
34
34
 
35
+ if dependency.version.nil? && dependency.requirements.any?
36
+ dependency = extract_base_version_from_requirement(dependency)
37
+ end
38
+
35
39
  @ignore_conditions
36
40
  .select { |ic| self.class.wildcard_match?(T.must(normalizer).call(ic.dependency_name), dep_name) }
37
41
  .map { |ic| ic.ignored_versions(dependency, security_updates_only) }
@@ -40,6 +44,19 @@ module Dependabot
40
44
  .uniq
41
45
  end
42
46
 
47
+ sig { params(dependency: Dependency).returns(Dependency) }
48
+ def extract_base_version_from_requirement(dependency)
49
+ requirements = dependency.requirements
50
+ requirement = T.must(requirements.first)[:requirement]
51
+ version = requirement&.match(/\d+\.\d+\.\d+/)&.to_s
52
+ Dependabot::Dependency.new(
53
+ name: dependency.name,
54
+ version: version,
55
+ requirements: dependency.requirements,
56
+ package_manager: dependency.package_manager
57
+ )
58
+ end
59
+
43
60
  sig { params(wildcard_string: T.nilable(String), candidate_string: T.nilable(String)).returns(T::Boolean) }
44
61
  def self.wildcard_match?(wildcard_string, candidate_string)
45
62
  return false unless wildcard_string && candidate_string
@@ -17,30 +17,38 @@ module Dependabot
17
17
  abstract!
18
18
  # Initialize version information for a package manager or language.
19
19
  # @param name [String] the name of the package manager or language (e.g., "bundler", "ruby").
20
- # @param version [Dependabot::Version] the parsed current version.
20
+ # @param detected_version [Dependabot::Version] the detected version of the package manager or language.
21
+ # @param version [Dependabot::Version] the version dependabots run on.
21
22
  # @param deprecated_versions [Array<Dependabot::Version>] an array of deprecated versions.
22
23
  # @param supported_versions [Array<Dependabot::Version>] an array of supported versions.
23
24
  # @param requirement [Dependabot::Requirement] an array of requirements.
24
25
  # @example
25
- # VersionManager.new("bundler", "2.1.4", nil)
26
+ # VersionManager.new(
27
+ # name: "bundler",
28
+ # version: Version.new("2.1.4"),
29
+ # requirement: nil
30
+ # )
26
31
  sig do
27
32
  params(
28
33
  name: String,
29
- version: Dependabot::Version,
34
+ detected_version: T.nilable(Dependabot::Version),
35
+ version: T.nilable(Dependabot::Version),
30
36
  deprecated_versions: T::Array[Dependabot::Version],
31
37
  supported_versions: T::Array[Dependabot::Version],
32
38
  requirement: T.nilable(Dependabot::Requirement)
33
39
  ).void
34
40
  end
35
41
  def initialize(
36
- name,
37
- version,
38
- deprecated_versions = [],
39
- supported_versions = [],
40
- requirement = nil
42
+ name:,
43
+ detected_version: nil,
44
+ version: nil,
45
+ deprecated_versions: [],
46
+ supported_versions: [],
47
+ requirement: nil
41
48
  )
42
49
  @name = T.let(name, String)
43
- @version = T.let(version, Dependabot::Version)
50
+ @detected_version = T.let(detected_version || version, T.nilable(Dependabot::Version))
51
+ @version = T.let(version, T.nilable(Dependabot::Version))
44
52
  @deprecated_versions = T.let(deprecated_versions, T::Array[Dependabot::Version])
45
53
  @supported_versions = T.let(supported_versions, T::Array[Dependabot::Version])
46
54
  @requirement = T.let(requirement, T.nilable(Dependabot::Requirement))
@@ -52,10 +60,16 @@ module Dependabot
52
60
  sig { returns(String) }
53
61
  attr_reader :name
54
62
 
63
+ # The current version of the package manager or language.
64
+ # @example
65
+ # detected_version #=> Dependabot::Version.new("2")
66
+ sig { returns(T.nilable(Dependabot::Version)) }
67
+ attr_reader :detected_version
68
+
55
69
  # The current version of the package manager or language.
56
70
  # @example
57
71
  # version #=> Dependabot::Version.new("2.1.4")
58
- sig { returns(Dependabot::Version) }
72
+ sig { returns(T.nilable(Dependabot::Version)) }
59
73
  attr_reader :version
60
74
 
61
75
  # Returns an array of deprecated versions of the package manager.
@@ -76,16 +90,34 @@ module Dependabot
76
90
  sig { returns(T.nilable(Dependabot::Requirement)) }
77
91
  attr_reader :requirement
78
92
 
93
+ # The version of the package manager or language as a string.
94
+ # @example
95
+ # version_to_s #=> "2.1"
96
+ sig { returns(String) }
97
+ def version_to_s
98
+ version.to_s
99
+ end
100
+
101
+ # The raw version of the package manager or language.
102
+ # @example
103
+ # raw_version #=> "2.1.4"
104
+ sig { returns(String) }
105
+ def version_to_raw_s
106
+ version&.to_semver.to_s
107
+ end
108
+
79
109
  # Checks if the current version is deprecated.
80
110
  # Returns true if the version is in the deprecated_versions array; false otherwise.
81
111
  # @example
82
112
  # deprecated? #=> true
83
113
  sig { returns(T::Boolean) }
84
114
  def deprecated?
115
+ return false unless detected_version
116
+
85
117
  # If the version is unsupported, the unsupported error is getting raised separately.
86
118
  return false if unsupported?
87
119
 
88
- deprecated_versions.include?(version)
120
+ deprecated_versions.include?(detected_version)
89
121
  end
90
122
 
91
123
  # Checks if the current version is unsupported.
@@ -93,16 +125,20 @@ module Dependabot
93
125
  # unsupported? #=> false
94
126
  sig { returns(T::Boolean) }
95
127
  def unsupported?
128
+ return false unless detected_version
129
+
96
130
  return false if supported_versions.empty?
97
131
 
98
132
  # Check if the version is not supported
99
- supported_versions.all? { |supported| supported > version }
133
+ supported_versions.all? { |supported| supported > detected_version }
100
134
  end
101
135
 
102
136
  # Raises an error if the current package manager or language version is unsupported.
103
137
  # If the version is unsupported, it raises a ToolVersionNotSupported error.
104
138
  sig { void }
105
139
  def raise_if_unsupported!
140
+ return unless detected_version
141
+
106
142
  return unless unsupported?
107
143
 
108
144
  # Example: v2.*, v3.*
@@ -110,7 +146,7 @@ module Dependabot
110
146
 
111
147
  raise ToolVersionNotSupported.new(
112
148
  name,
113
- version.to_s,
149
+ detected_version.to_s,
114
150
  supported_versions_message
115
151
  )
116
152
  end
@@ -83,6 +83,11 @@ module Dependabot
83
83
  # and responsibility for fixing it is on them, not us. As a result we
84
84
  # quietly log these as errors
85
85
  { "error-type": "server_error" }
86
+ when BadRequirementError
87
+ {
88
+ "error-type": "illformed_requirement",
89
+ "error-detail": { message: error.message }
90
+ }
86
91
  when *Octokit::RATE_LIMITED_ERRORS
87
92
  # If we get a rate-limited error we let dependabot-api handle the
88
93
  # retry by re-enqueing the update job after the reset
@@ -311,7 +311,7 @@ module Dependabot
311
311
 
312
312
  SharedHelpers.with_git_configured(credentials: credentials) do
313
313
  Dir.chdir(T.must(repo_contents_path)) do
314
- return SharedHelpers.run_shell_command("git rev-parse HEAD").strip
314
+ return SharedHelpers.run_shell_command("git rev-parse HEAD", stderr_to_stdout: false).strip
315
315
  end
316
316
  end
317
317
  end
@@ -71,15 +71,20 @@ module Dependabot
71
71
  # Generates a description for supported versions.
72
72
  # @param supported_versions [Array<Dependabot::Version>, nil] The supported versions of the package manager.
73
73
  # @param support_later_versions [Boolean] Whether later versions are supported.
74
+ # @param version_manager_type [Symbol] The type of entity being deprecated i.e. :language or :package_manager
74
75
  # @return [String, nil] The generated description or nil if no supported versions are provided.
75
76
  sig do
76
77
  params(
77
78
  supported_versions: T.nilable(T::Array[Dependabot::Version]),
78
- support_later_versions: T::Boolean
79
+ support_later_versions: T::Boolean,
80
+ version_manager_type: Symbol
79
81
  ).returns(String)
80
82
  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
+ def self.generate_supported_versions_description(
84
+ supported_versions, support_later_versions, version_manager_type = :package_manager
85
+ )
86
+ entity_text = version_manager_type == :language ? "language" : "package manager"
87
+ return "Please upgrade your #{entity_text} version" unless supported_versions&.any?
83
88
 
84
89
  versions_string = supported_versions.map { |version| "`v#{version}`" }
85
90
 
@@ -94,25 +99,28 @@ module Dependabot
94
99
  "Please upgrade to one of the following versions: #{versions_string}#{later_description}."
95
100
  end
96
101
 
97
- # Generates a deprecation notice for the given package manager.
98
- # @param package_manager [VersionManager] The package manager object.
99
- # @return [Notice, nil] The generated deprecation notice or nil if the package manager is not deprecated.
102
+ # Generates a deprecation notice for the given version manager.
103
+ # @param version_manager [VersionManager] The version manager object.
104
+ # @param version_manager_type [Symbol] The version manager type e.g. :language or :package_manager
105
+ # @return [Notice, nil] The generated deprecation notice or nil if the version manager is not deprecated.
100
106
  sig do
101
107
  params(
102
- package_manager: Ecosystem::VersionManager
108
+ version_manager: Ecosystem::VersionManager,
109
+ version_manager_type: Symbol
103
110
  ).returns(T.nilable(Notice))
104
111
  end
105
- def self.generate_pm_deprecation_notice(package_manager)
106
- return nil unless package_manager.deprecated?
112
+ def self.generate_deprecation_notice(version_manager, version_manager_type = :package_manager)
113
+ return nil unless version_manager.deprecated?
107
114
 
108
115
  mode = NoticeMode::WARN
109
116
  supported_versions_description = generate_supported_versions_description(
110
- package_manager.supported_versions,
111
- package_manager.support_later_versions?
117
+ version_manager.supported_versions,
118
+ version_manager.support_later_versions?,
119
+ version_manager_type
112
120
  )
113
- notice_type = "#{package_manager.name}_deprecated_warn"
114
- title = "Package manager deprecation notice"
115
- description = "Dependabot will stop supporting `#{package_manager.name} v#{package_manager.version}`!"
121
+ notice_type = "#{version_manager.name}_deprecated_warn"
122
+ title = version_manager_type == :language ? "Language deprecation notice" : "Package manager deprecation notice"
123
+ description = "Dependabot will stop supporting `#{version_manager.name} v#{version_manager.detected_version}`!"
116
124
 
117
125
  ## Add the supported versions to the description
118
126
  description += "\n\n#{supported_versions_description}\n" unless supported_versions_description.empty?
@@ -120,7 +128,7 @@ module Dependabot
120
128
  Notice.new(
121
129
  mode: mode,
122
130
  type: notice_type,
123
- package_manager_name: package_manager.name,
131
+ package_manager_name: version_manager.name,
124
132
  title: title,
125
133
  description: description,
126
134
  show_in_pr: true,
@@ -87,7 +87,7 @@ module Dependabot
87
87
 
88
88
  sig { returns(String) }
89
89
  def head_sha
90
- run_shell_command("git rev-parse HEAD").strip
90
+ run_shell_command("git rev-parse HEAD", stderr_to_stdout: false).strip
91
91
  end
92
92
 
93
93
  sig { returns(String) }
data/lib/dependabot.rb CHANGED
@@ -2,5 +2,5 @@
2
2
  # frozen_string_literal: true
3
3
 
4
4
  module Dependabot
5
- VERSION = "0.291.0"
5
+ VERSION = "0.292.0"
6
6
  end
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.291.0
4
+ version: 0.292.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-12-19 00:00:00.000000000 Z
11
+ date: 2025-01-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: aws-sdk-codecommit
@@ -615,7 +615,7 @@ licenses:
615
615
  - MIT
616
616
  metadata:
617
617
  bug_tracker_uri: https://github.com/dependabot/dependabot-core/issues
618
- changelog_uri: https://github.com/dependabot/dependabot-core/releases/tag/v0.291.0
618
+ changelog_uri: https://github.com/dependabot/dependabot-core/releases/tag/v0.292.0
619
619
  post_install_message:
620
620
  rdoc_options: []
621
621
  require_paths:
@@ -631,7 +631,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
631
631
  - !ruby/object:Gem::Version
632
632
  version: 3.3.7
633
633
  requirements: []
634
- rubygems_version: 3.5.9
634
+ rubygems_version: 3.5.22
635
635
  signing_key:
636
636
  specification_version: 4
637
637
  summary: Shared code used across Dependabot Core