dependabot-bundler 0.262.0 → 0.263.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: f3110295d89e7d09947a48ccb7a3c623684e62392a2467e5708dc83ca1d1c698
4
- data.tar.gz: d675d23e1adab94cad313a607d02cc1712491f90d3fcd9649d6bd6874de223f9
3
+ metadata.gz: 50457240c048f6430b4894d8f032b2eab8bbda90c88566bbbee21e6d4d29fcbe
4
+ data.tar.gz: c907811fc0c0ea30a9b9bb62f59c53182515b1cc94bf6e94d65899d588afa1cc
5
5
  SHA512:
6
- metadata.gz: 7c3680e4726f1b5999721dee5a0d2df0587f6ed4391a59a5ff3af16116c965088dd2cb582147e1ad7eb73c10b67bf05a9ac100d71a4229daf2ea63680c6a9f1e
7
- data.tar.gz: 3a2e33646daacd25c82ae4be8a664f21ce41b185dba0d24ae2adee045e5c70c3be1e4baf3adfcd2f9cc65f53ba3ebb812041158564dd59e28dfe767f43ce2d9b
6
+ metadata.gz: f230c5e09b5cd4c5a6d92012a6a7590d6edeb22f0663a1f2bdc26911202360c4edbcb02304f2f128b4ce9e44ec763d19d2fac00bde79a0a5dc507addc768b8ff
7
+ data.tar.gz: eca4288984f2fe056f60c3147a20347f599e49294b8c9e66aae53069577ea8300c89a0085fbfc59528dbf53be28ee32289435f2f75f27038065c931f73cf576a
@@ -1,10 +1,11 @@
1
- # typed: true
1
+ # typed: strict
2
2
  # frozen_string_literal: true
3
3
 
4
4
  require "pathname"
5
5
  require "parser/current"
6
6
  require "dependabot/bundler/file_fetcher"
7
7
  require "dependabot/errors"
8
+ require "sorbet-runtime"
8
9
 
9
10
  module Dependabot
10
11
  module Bundler
@@ -12,36 +13,42 @@ module Dependabot
12
13
  # Finds the paths of any gemspecs declared using `path: ` in the
13
14
  # passed Gemfile.
14
15
  class PathGemspecFinder
16
+ extend T::Sig
17
+
18
+ sig { params(gemfile: Dependabot::DependencyFile).void }
15
19
  def initialize(gemfile:)
16
20
  @gemfile = gemfile
17
21
  end
18
22
 
23
+ sig { returns(T::Array[String]) }
19
24
  def path_gemspec_paths
20
- ast = Parser::CurrentRuby.parse(gemfile.content)
25
+ ast = Parser::CurrentRuby.parse(gemfile&.content)
21
26
  find_path_gemspec_paths(ast)
22
27
  rescue Parser::SyntaxError
23
- raise Dependabot::DependencyFileNotParseable, gemfile.path
28
+ raise Dependabot::DependencyFileNotParseable, T.must(gemfile).path
24
29
  end
25
30
 
26
31
  private
27
32
 
33
+ sig { returns(T.nilable(Dependabot::DependencyFile)) }
28
34
  attr_reader :gemfile
29
35
 
36
+ sig { params(node: T.untyped).returns(T::Array[T.untyped]) }
30
37
  def find_path_gemspec_paths(node)
31
38
  return [] unless node.is_a?(Parser::AST::Node)
32
39
 
33
40
  if declares_path_dependency?(node)
34
41
  path_node = path_node_for_gem_declaration(node)
35
42
 
36
- unless path_node.type == :str
37
- path = gemfile.path
43
+ unless path_node&.type == :str
44
+ path = gemfile&.path
38
45
  msg = "Dependabot only supports uninterpolated string arguments " \
39
46
  "for path dependencies. Got " \
40
- "`#{path_node.loc.expression.source}`"
41
- raise Dependabot::DependencyFileNotParseable.new(path, msg)
47
+ "`#{path_node&.loc&.expression&.source}`"
48
+ raise Dependabot::DependencyFileNotParseable.new(T.must(path), msg)
42
49
  end
43
50
 
44
- path = path_node.loc.expression.source.gsub(/['"]/, "")
51
+ path = T.must(path_node).loc.expression.source.gsub(/['"]/, "")
45
52
  return [clean_path(path)]
46
53
  end
47
54
 
@@ -50,12 +57,14 @@ module Dependabot
50
57
  end
51
58
  end
52
59
 
60
+ sig { returns(T.nilable(String)) }
53
61
  def current_dir
54
- @current_dir ||= gemfile.name.rpartition("/").first
62
+ @current_dir ||= T.let(gemfile&.name&.rpartition("/")&.first, T.nilable(String))
55
63
  @current_dir = nil if @current_dir == ""
56
64
  @current_dir
57
65
  end
58
66
 
67
+ sig { params(node: Parser::AST::Node).returns(T::Boolean) }
59
68
  def declares_path_dependency?(node)
60
69
  return false unless node.is_a?(Parser::AST::Node)
61
70
  return false unless node.children[1] == :gem
@@ -63,6 +72,7 @@ module Dependabot
63
72
  !path_node_for_gem_declaration(node).nil?
64
73
  end
65
74
 
75
+ sig { params(path: String).returns(Pathname) }
66
76
  def clean_path(path)
67
77
  if Pathname.new(path).absolute?
68
78
  base_path = Pathname.new(File.expand_path(Dir.pwd))
@@ -72,6 +82,7 @@ module Dependabot
72
82
  Pathname.new(path).cleanpath
73
83
  end
74
84
 
85
+ sig { params(node: Parser::AST::Node).returns(T.nilable(Parser::AST::Node)) }
75
86
  def path_node_for_gem_declaration(node)
76
87
  return unless node.children.last.type == :hash
77
88
 
@@ -86,6 +97,7 @@ module Dependabot
86
97
  path_hash_pair.children.last
87
98
  end
88
99
 
100
+ sig { params(node: Parser::AST::Node).returns(Symbol) }
89
101
  def key_from_hash_pair(node)
90
102
  node.children.first.children.first.to_sym
91
103
  end
@@ -12,7 +12,7 @@ module Dependabot
12
12
  class RubyVersionNotFound < StandardError; end
13
13
 
14
14
  RUBY_VERSIONS = %w(
15
- 1.8.7 1.9.3 2.0.0 2.1.10 2.2.10 2.3.8 2.4.10 2.5.9 2.6.9 2.7.6 3.0.6 3.1.4 3.2.2 3.3.1
15
+ 1.8.7 1.9.3 2.0.0 2.1.10 2.2.10 2.3.8 2.4.10 2.5.9 2.6.9 2.7.6 3.0.6 3.1.4 3.2.2 3.3.3
16
16
  ).freeze
17
17
 
18
18
  attr_reader :gemspec
@@ -11,6 +11,11 @@ module Dependabot
11
11
  class Requirement < Dependabot::Requirement
12
12
  extend T::Sig
13
13
 
14
+ sig { params(req: T::Hash[Symbol, String], version: Gem::Version).returns(T::Boolean) }
15
+ def self.satisfied_by?(req, version)
16
+ new(req[:requirement]).satisfied_by?(version)
17
+ end
18
+
14
19
  # For consistency with other languages, we define a requirements array.
15
20
  # Ruby doesn't have an `OR` separator for requirements, so it always
16
21
  # contains a single element.
@@ -51,6 +51,13 @@ module Dependabot
51
51
  end
52
52
 
53
53
  def force_update
54
+ requirement = dependency.requirements.find { |req| req[:file] == gemfile.name }
55
+ manifest_requirement_not_satisfied = requirement && !Requirement.satisfied_by?(requirement, target_version)
56
+
57
+ if manifest_requirement_not_satisfied && requirements_update_strategy.lockfile_only?
58
+ raise Dependabot::DependencyFileNotResolvable
59
+ end
60
+
54
61
  in_a_native_bundler_context(error_handling: false) do |tmp_dir|
55
62
  updated_deps, specs = NativeHelpers.run_bundler_subprocess(
56
63
  bundler_version: bundler_version,
@@ -67,10 +74,10 @@ module Dependabot
67
74
  }
68
75
  )
69
76
  dependencies_from(updated_deps, specs)
77
+ rescue SharedHelpers::HelperSubprocessFailed => e
78
+ msg = e.error_class + " with message: " + e.message
79
+ raise Dependabot::DependencyFileNotResolvable, msg
70
80
  end
71
- rescue SharedHelpers::HelperSubprocessFailed => e
72
- msg = e.error_class + " with message: " + e.message
73
- raise Dependabot::DependencyFileNotResolvable, msg
74
81
  end
75
82
 
76
83
  def original_dependencies
@@ -39,7 +39,7 @@ module Dependabot
39
39
  end
40
40
 
41
41
  def updated_requirements
42
- return requirements if update_strategy == RequirementsUpdateStrategy::LockfileOnly
42
+ return requirements if update_strategy.lockfile_only?
43
43
 
44
44
  requirements.map do |req|
45
45
  if req[:file].include?(".gemspec")
@@ -102,8 +102,7 @@ module Dependabot
102
102
  end
103
103
 
104
104
  def new_version_satisfies?(req)
105
- original_req = Gem::Requirement.new(req[:requirement].split(","))
106
- original_req.satisfied_by?(latest_resolvable_version)
105
+ Requirement.satisfied_by?(req, latest_resolvable_version)
107
106
  end
108
107
 
109
108
  def update_gemfile_range(requirements)
@@ -42,9 +42,9 @@ module Dependabot
42
42
  lowest_fix =
43
43
  latest_version_finder(remove_git_source: false)
44
44
  .lowest_security_fix_version
45
- return unless lowest_fix
45
+ return unless lowest_fix && resolvable?(lowest_fix)
46
46
 
47
- resolvable?(lowest_fix) ? lowest_fix : latest_resolvable_version
47
+ lowest_fix
48
48
  end
49
49
 
50
50
  def latest_resolvable_version_with_no_unlock
@@ -77,7 +77,7 @@ module Dependabot
77
77
 
78
78
  def requirements_unlocked_or_can_be?
79
79
  return true if requirements_unlocked?
80
- return false if requirements_update_strategy == RequirementsUpdateStrategy::LockfileOnly
80
+ return false if requirements_update_strategy.lockfile_only?
81
81
 
82
82
  dependency.specific_requirements
83
83
  .all? do |req|
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dependabot-bundler
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.262.0
4
+ version: 0.263.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-06-20 00:00:00.000000000 Z
11
+ date: 2024-06-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: dependabot-common
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - '='
18
18
  - !ruby/object:Gem::Version
19
- version: 0.262.0
19
+ version: 0.263.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - '='
25
25
  - !ruby/object:Gem::Version
26
- version: 0.262.0
26
+ version: 0.263.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: parallel
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -345,7 +345,7 @@ licenses:
345
345
  - MIT
346
346
  metadata:
347
347
  bug_tracker_uri: https://github.com/dependabot/dependabot-core/issues
348
- changelog_uri: https://github.com/dependabot/dependabot-core/releases/tag/v0.262.0
348
+ changelog_uri: https://github.com/dependabot/dependabot-core/releases/tag/v0.263.0
349
349
  post_install_message:
350
350
  rdoc_options: []
351
351
  require_paths: