dependabot-common 0.288.0 → 0.289.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: 550020f64e127c0aeb071589d9d77b6a9b00bc3c516ce3baecf6f8b072fa2621
4
- data.tar.gz: 0f0162b707b4954b8a3f09addb4f5eb1d16f4d3863bb875dd95faee5efb0c2a7
3
+ metadata.gz: df0add56e9f09e63d8481893c92cb68ff4fa3724271c4378287b22853f237d15
4
+ data.tar.gz: bd4edfe5bb0ce0823d6a61fa3ec525ea98b77e1bfd4f665ba043f1f18db06834
5
5
  SHA512:
6
- metadata.gz: 836eb356d0714bff9005c5d83f01f918c722094166df7a0d1c1629c6af484ab600680bd02ebe1b713f6f638d1c3e73ddd02b1ccdb7d16be3b03f25af8a7c04bf
7
- data.tar.gz: 95190537ceea2262ced17707f5276931dd1554a92c1478054773a5395317154e6c99243cb048d45aee1377beeb33f556c145e8cd94838075633dc5116cf9800d
6
+ metadata.gz: 193dcab40ec19933c8fb9ca6eea0a41514ba006e4b554083d2ffbaee802e29d572fe0cf1897df3433981f85632aa7d03e700fce06d2b90661afc76630d4e39e9
7
+ data.tar.gz: 3c85ae8e5c55f03fca4ee85aa303a79385c188b34c402c5d8675ce65b51487ca43eab21abaa1570eea257964c0f7fbe2d16b0669754d31b441b8a4898f307d50
@@ -12,6 +12,8 @@ module Dependabot
12
12
  extend T::Sig
13
13
  extend T::Helpers
14
14
 
15
+ DEFAULT_VERSION_PATTERN = /(\d+\.\d+(.\d+)*)/
16
+
15
17
  abstract!
16
18
  # Initialize version information for a package manager or language.
17
19
  # @param name [String] the name of the package manager or language (e.g., "bundler", "ruby").
@@ -18,9 +18,6 @@ module Dependabot
18
18
  sig { returns(T.nilable(String)) }
19
19
  attr_reader :target_branch
20
20
 
21
- sig { returns(T::Array[String]) }
22
- attr_reader :existing_branches
23
-
24
21
  sig { returns(String) }
25
22
  attr_reader :separator
26
23
 
@@ -35,19 +32,17 @@ module Dependabot
35
32
  dependencies: T::Array[Dependency],
36
33
  files: T::Array[DependencyFile],
37
34
  target_branch: T.nilable(String),
38
- existing_branches: T::Array[String],
39
35
  separator: String,
40
36
  prefix: String,
41
37
  max_length: T.nilable(Integer)
42
38
  )
43
39
  .void
44
40
  end
45
- def initialize(dependencies:, files:, target_branch:, existing_branches: [],
46
- separator: "/", prefix: "dependabot", max_length: nil)
41
+ def initialize(dependencies:, files:, target_branch:, separator: "/",
42
+ prefix: "dependabot", max_length: nil)
47
43
  @dependencies = dependencies
48
44
  @files = files
49
45
  @target_branch = target_branch
50
- @existing_branches = existing_branches
51
46
  @separator = separator
52
47
  @prefix = prefix
53
48
  @max_length = max_length
@@ -17,7 +17,6 @@ module Dependabot
17
17
  target_branch: T.nilable(String),
18
18
  dependency_group: Dependabot::DependencyGroup,
19
19
  includes_security_fixes: T::Boolean,
20
- existing_branches: T::Array[String],
21
20
  separator: String,
22
21
  prefix: String,
23
22
  max_length: T.nilable(Integer)
@@ -25,12 +24,11 @@ module Dependabot
25
24
  .void
26
25
  end
27
26
  def initialize(dependencies:, files:, target_branch:, dependency_group:, includes_security_fixes:,
28
- existing_branches: [], separator: "/", prefix: "dependabot", max_length: nil)
27
+ separator: "/", prefix: "dependabot", max_length: nil)
29
28
  super(
30
29
  dependencies: dependencies,
31
30
  files: files,
32
31
  target_branch: target_branch,
33
- existing_branches: existing_branches,
34
32
  separator: separator,
35
33
  prefix: prefix,
36
34
  max_length: max_length,
@@ -23,9 +23,6 @@ module Dependabot
23
23
  sig { returns(T.nilable(String)) }
24
24
  attr_reader :target_branch
25
25
 
26
- sig { returns(T::Array[String]) }
27
- attr_reader :existing_branches
28
-
29
26
  sig { returns(String) }
30
27
  attr_reader :separator
31
28
 
@@ -47,7 +44,6 @@ module Dependabot
47
44
  files: T::Array[Dependabot::DependencyFile],
48
45
  target_branch: T.nilable(String),
49
46
  dependency_group: T.nilable(Dependabot::DependencyGroup),
50
- existing_branches: T::Array[String],
51
47
  separator: String,
52
48
  prefix: String,
53
49
  max_length: T.nilable(Integer),
@@ -55,13 +51,12 @@ module Dependabot
55
51
  )
56
52
  .void
57
53
  end
58
- def initialize(dependencies:, files:, target_branch:, dependency_group: nil, existing_branches: [],
59
- separator: "/", prefix: "dependabot", max_length: nil, includes_security_fixes: false)
54
+ def initialize(dependencies:, files:, target_branch:, dependency_group: nil, separator: "/",
55
+ prefix: "dependabot", max_length: nil, includes_security_fixes: false)
60
56
  @dependencies = dependencies
61
57
  @files = files
62
58
  @target_branch = target_branch
63
59
  @dependency_group = dependency_group
64
- @existing_branches = existing_branches
65
60
  @separator = separator
66
61
  @prefix = prefix
67
62
  @max_length = max_length
@@ -77,19 +72,12 @@ module Dependabot
77
72
 
78
73
  sig { returns(Dependabot::PullRequestCreator::BranchNamer::Base) }
79
74
  def strategy
80
- if Dependabot::Experiments.enabled?(:dedup_branch_names) && existing_branches
81
- Dependabot.logger.debug(
82
- "Dependabot::PullRequestCreator::strategy : #{existing_branches}"
83
- )
84
- end
85
-
86
75
  @strategy ||= T.let(
87
76
  if dependency_group.nil?
88
77
  SoloStrategy.new(
89
78
  dependencies: dependencies,
90
79
  files: files,
91
80
  target_branch: target_branch,
92
- existing_branches: existing_branches,
93
81
  separator: separator,
94
82
  prefix: prefix,
95
83
  max_length: max_length
@@ -101,7 +89,6 @@ module Dependabot
101
89
  target_branch: target_branch,
102
90
  dependency_group: T.must(dependency_group),
103
91
  includes_security_fixes: includes_security_fixes,
104
- existing_branches: existing_branches,
105
92
  separator: separator,
106
93
  prefix: prefix,
107
94
  max_length: max_length
@@ -114,7 +114,7 @@ module Dependabot
114
114
  "Initiating Github pull request."
115
115
  )
116
116
 
117
- if experiment_duplicate_branch? && branch_exists?(branch_name) && no_pull_request_exists?
117
+ if branch_exists?(branch_name) && no_pull_request_exists?
118
118
  Dependabot.logger.info(
119
119
  "Existing branch \"#{branch_name}\" found. Pull request not created."
120
120
  )
@@ -600,11 +600,6 @@ module Dependabot
600
600
  raise type, message
601
601
  end
602
602
  end
603
-
604
- sig { returns(T::Boolean) }
605
- def experiment_duplicate_branch?
606
- Dependabot::Experiments.enabled?(:dedup_branch_names)
607
- end
608
603
  end
609
604
  # rubocop:enable Metrics/ClassLength
610
605
  end
@@ -117,9 +117,6 @@ module Dependabot
117
117
  sig { returns(T.nilable(T.any(T::Array[String], Integer))) }
118
118
  attr_reader :milestone
119
119
 
120
- sig { returns(T::Array[String]) }
121
- attr_reader :existing_branches
122
-
123
120
  sig { returns(String) }
124
121
  attr_reader :branch_name_separator
125
122
 
@@ -164,7 +161,6 @@ module Dependabot
164
161
  reviewers: Reviewers,
165
162
  assignees: T.nilable(T.any(T::Array[String], T::Array[Integer])),
166
163
  milestone: T.nilable(T.any(T::Array[String], Integer)),
167
- existing_branches: T::Array[String],
168
164
  branch_name_separator: String,
169
165
  branch_name_prefix: String,
170
166
  branch_name_max_length: T.nilable(Integer),
@@ -187,8 +183,7 @@ module Dependabot
187
183
  pr_message_header: nil, pr_message_footer: nil,
188
184
  custom_labels: nil, author_details: nil, signature_key: nil,
189
185
  commit_message_options: {}, vulnerabilities_fixed: {},
190
- reviewers: nil, assignees: nil, milestone: nil,
191
- existing_branches: [], branch_name_separator: "/",
186
+ reviewers: nil, assignees: nil, milestone: nil, branch_name_separator: "/",
192
187
  branch_name_prefix: "dependabot", branch_name_max_length: nil,
193
188
  label_language: false, automerge_candidate: false,
194
189
  github_redirection_service: DEFAULT_GITHUB_REDIRECTION_SERVICE,
@@ -210,7 +205,6 @@ module Dependabot
210
205
  @assignees = assignees
211
206
  @milestone = milestone
212
207
  @vulnerabilities_fixed = vulnerabilities_fixed
213
- @existing_branches = existing_branches
214
208
  @branch_name_separator = branch_name_separator
215
209
  @branch_name_prefix = branch_name_prefix
216
210
  @branch_name_max_length = branch_name_max_length
@@ -404,7 +398,6 @@ module Dependabot
404
398
  files: files,
405
399
  target_branch: source.branch,
406
400
  dependency_group: dependency_group,
407
- existing_branches: existing_branches,
408
401
  separator: branch_name_separator,
409
402
  prefix: branch_name_prefix,
410
403
  max_length: branch_name_max_length,
@@ -30,7 +30,8 @@ module Dependabot
30
30
  Excon.get(
31
31
  url,
32
32
  idempotent: true,
33
- **SharedHelpers.excon_defaults({ headers: headers }.merge(options))
33
+ **SharedHelpers.excon_defaults({ headers: headers }.merge(options)),
34
+ retry_interval: 5
34
35
  )
35
36
  rescue Excon::Error::Timeout => e
36
37
  cache_error(url, e)
@@ -34,11 +34,13 @@ module Dependabot
34
34
  # Select constraints with minimum operators
35
35
  min_constraints = requirements.select { |op, _| MINIMUM_OPERATORS.include?(op) }
36
36
 
37
- # Choose the maximum version among the minimum constraints
38
- max_min_constraint = min_constraints.max_by { |_, version| version }
37
+ # Process each minimum constraint using the respective handler
38
+ effective_min_versions = min_constraints.filter_map do |op, version|
39
+ handle_min_operator(op, version.is_a?(Dependabot::Version) ? version : Dependabot::Version.new(version))
40
+ end
39
41
 
40
- # Return the version part of the max constraint, if it exists
41
- Dependabot::Version.new(max_min_constraint&.last) if max_min_constraint&.last
42
+ # Return the maximum among the effective minimum constraints
43
+ Dependabot::Version.new(effective_min_versions.max) if effective_min_versions.any?
42
44
  end
43
45
 
44
46
  # Returns the lowest upper limit among all maximum constraints.
@@ -47,28 +49,89 @@ module Dependabot
47
49
  # Select constraints with maximum operators
48
50
  max_constraints = requirements.select { |op, _| MAXIMUM_OPERATORS.include?(op) }
49
51
 
50
- # Process each maximum constraint, handling "~>" constraints based on length
51
- effective_max_versions = max_constraints.map do |op, version|
52
- if op == "~>"
53
- # If "~>" constraint, bump based on the specificity of the version
54
- case version.segments.length
55
- when 1
56
- # Bump major version (e.g., 2 -> 3.0.0)
57
- Dependabot::Version.new((version.segments[0].to_i + 1).to_s + ".0.0")
58
- when 2
59
- # Bump minor version (e.g., 2.5 -> 2.6.0)
60
- Dependabot::Version.new("#{version.segments[0]}.#{version.segments[1] + 1}.0")
61
- else
62
- # For three or more segments, use version.bump
63
- version.bump # e.g., "~> 2.9.9" becomes upper bound 3.0.0
64
- end
65
- else
66
- version
67
- end
52
+ # Process each maximum constraint using the respective handler
53
+ effective_max_versions = max_constraints.filter_map do |op, version|
54
+ handle_max_operator(op, version.is_a?(Dependabot::Version) ? version : Dependabot::Version.new(version))
55
+ end
56
+
57
+ # Return the minimum among the effective maximum constraints
58
+ Dependabot::Version.new(effective_max_versions.min) if effective_max_versions.any?
59
+ end
60
+
61
+ # Dynamically handles minimum operators
62
+ sig { params(operator: String, version: Dependabot::Version).returns(T.nilable(Dependabot::Version)) }
63
+ def handle_min_operator(operator, version)
64
+ case operator
65
+ when ">=" then handle_greater_than_or_equal_for_min(version)
66
+ when ">" then handle_greater_than_for_min(version)
67
+ when "~>" then handle_tilde_pessimistic_for_min(version)
68
+ end
69
+ end
70
+
71
+ # Dynamically handles maximum operators
72
+ sig { params(operator: String, version: Dependabot::Version).returns(T.nilable(Dependabot::Version)) }
73
+ def handle_max_operator(operator, version)
74
+ case operator
75
+ when "<=" then handle_less_than_or_equal_for_max(version)
76
+ when "<" then handle_less_than_max(version)
77
+ when "~>" then handle_tilde_pessimistic_max(version)
68
78
  end
79
+ end
80
+
81
+ # Methods for handling minimum constraints
82
+ sig { params(version: Dependabot::Version).returns(Dependabot::Version) }
83
+ def handle_greater_than_or_equal_for_min(version)
84
+ version
85
+ end
86
+
87
+ sig { params(version: Dependabot::Version).returns(Dependabot::Version) }
88
+ def handle_greater_than_for_min(version)
89
+ version
90
+ end
91
+
92
+ sig { params(version: Dependabot::Version).returns(Dependabot::Version) }
93
+ def handle_tilde_pessimistic_for_min(version)
94
+ version
95
+ end
96
+
97
+ # Methods for handling maximum constraints
98
+ sig { params(version: Dependabot::Version).returns(Dependabot::Version) }
99
+ def handle_less_than_or_equal_for_max(version)
100
+ version
101
+ end
102
+
103
+ sig { params(version: Dependabot::Version).returns(Dependabot::Version) }
104
+ def handle_less_than_max(version)
105
+ version
106
+ end
107
+
108
+ sig { params(version: Dependabot::Version).returns(Dependabot::Version) }
109
+ def handle_tilde_pessimistic_max(version)
110
+ case version.segments.length
111
+ when 1
112
+ bump_major_segment(version)
113
+ when 2
114
+ bump_minor_segment(version)
115
+ else
116
+ bump_version(version)
117
+ end
118
+ end
119
+
120
+ private
121
+
122
+ sig { params(version: Dependabot::Version).returns(Dependabot::Version) }
123
+ def bump_major_segment(version)
124
+ Dependabot::Version.new("#{version.segments[0].to_i + 1}.0.0")
125
+ end
126
+
127
+ sig { params(version: Dependabot::Version).returns(Dependabot::Version) }
128
+ def bump_minor_segment(version)
129
+ Dependabot::Version.new("#{version.segments[0]}.#{version.segments[1].to_i + 1}.0")
130
+ end
69
131
 
70
- # Return the smallest among the effective maximum constraints
71
- Dependabot::Version.new(effective_max_versions.min) if effective_max_versions.min
132
+ sig { params(version: Dependabot::Version).returns(Dependabot::Version) }
133
+ def bump_version(version)
134
+ Dependabot::Version.new(version.bump)
72
135
  end
73
136
  end
74
137
  end
data/lib/dependabot.rb CHANGED
@@ -2,5 +2,5 @@
2
2
  # frozen_string_literal: true
3
3
 
4
4
  module Dependabot
5
- VERSION = "0.288.0"
5
+ VERSION = "0.289.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.288.0
4
+ version: 0.289.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-11-21 00:00:00.000000000 Z
11
+ date: 2024-12-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: aws-sdk-codecommit
@@ -614,7 +614,7 @@ licenses:
614
614
  - MIT
615
615
  metadata:
616
616
  bug_tracker_uri: https://github.com/dependabot/dependabot-core/issues
617
- changelog_uri: https://github.com/dependabot/dependabot-core/releases/tag/v0.288.0
617
+ changelog_uri: https://github.com/dependabot/dependabot-core/releases/tag/v0.289.0
618
618
  post_install_message:
619
619
  rdoc_options: []
620
620
  require_paths: