dependabot-common 0.216.0 → 0.216.2

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: 645d08a2a5cfd122e1ec0bb4302d7c4e80bd0348e0c0e52d28dc210d196b963b
4
- data.tar.gz: 25d81216a7b48d60b332d241e06f3a7dcc384b06ea3f5fac1dcc02949da226dc
3
+ metadata.gz: 4b38a1d09ce4d017caa3e68544d16abb8052e27febb10b6c2aa48ea7689dd5dd
4
+ data.tar.gz: 6f1f21ff545f58a09a7dd238cf3a2fe56ca59ab29c6f51a9d7594762769ccf79
5
5
  SHA512:
6
- metadata.gz: 8ef726592da7c2ff04784322801d12902ab42613e53b084687acdbfb479982e60a5303cb6e7f249e5525547a7b7681af48c3afe9df16cfda435b771e5e3f84ad
7
- data.tar.gz: ef3a1010b2dd5736c9595754b1eb1cf1cca4cd7eecdfae551b97a2d84c71952ccad43bedafab0f9b6cea07892afbff41b766d9d8941ae10bcd7eedb434970aa3
6
+ metadata.gz: ae81f98a72640e7ea5b5dd7d5f813ff8b32663a0269b9cd4b57bebfe74d5db654f4da4aa9d6bbfe8c0c6a64af78a7017bb29db0e646481a1c81d35b60f3f4ff0
7
+ data.tar.gz: 034a48105df2f2a2633944697a3339b08f4d6f4bdb2fe5f277926d38d7032d2fbb8d5c6878b926710d53f495d8d547165261faab818a70c143afb423af7fda2f
@@ -95,7 +95,7 @@ module Dependabot
95
95
  c.proxy = ENV["HTTPS_PROXY"] if ENV["HTTPS_PROXY"]
96
96
  end
97
97
 
98
- Octokit.middleware = Faraday::RackBuilder.new do |builder|
98
+ args[:middleware] = Faraday::RackBuilder.new do |builder|
99
99
  builder.use Faraday::Retry::Middleware, exceptions: RETRYABLE_ERRORS, max: max_retries || 3
100
100
 
101
101
  Octokit::Default::MIDDLEWARE.handlers.each do |handler|
@@ -199,12 +199,16 @@ module Dependabot
199
199
  self == other
200
200
  end
201
201
 
202
- private
202
+ def requirement_class
203
+ Utils.requirement_class_for_package_manager(package_manager)
204
+ end
203
205
 
204
206
  def version_class
205
207
  Utils.version_class_for_package_manager(package_manager)
206
208
  end
207
209
 
210
+ private
211
+
208
212
  def check_values
209
213
  raise ArgumentError, "blank strings must not be provided as versions" if [version, previous_version].any?("")
210
214
 
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "wildcard_matcher"
4
+
5
+ module Dependabot
6
+ class DependencyGroup
7
+ attr_reader :name, :rules, :dependencies
8
+
9
+ def initialize(name:, rules:)
10
+ @name = name
11
+ @rules = rules
12
+ @dependencies = []
13
+ end
14
+
15
+ def contains?(dependency)
16
+ @dependencies.include?(dependency) if @dependencies.any?
17
+ rules.any? { |rule| WildcardMatcher.match?(rule, dependency.name) }
18
+ end
19
+ end
20
+ end
@@ -80,7 +80,7 @@ module Dependabot
80
80
 
81
81
  def initialize(file_path, msg = nil)
82
82
  @file_path = file_path
83
- super("#{file_path} not found" || msg)
83
+ super(msg || "#{file_path} not found")
84
84
  end
85
85
 
86
86
  def file_name
@@ -98,7 +98,7 @@ module Dependabot
98
98
 
99
99
  def initialize(file_path, msg = nil)
100
100
  @file_path = file_path
101
- super(msg)
101
+ super(msg || "#{file_path} not parseable")
102
102
  end
103
103
 
104
104
  def file_name
@@ -153,7 +153,7 @@ module Dependabot
153
153
  end
154
154
 
155
155
  def version_class
156
- @version_class ||= Utils.version_class_for_package_manager(@combined.package_manager)
156
+ @version_class ||= @combined.version_class
157
157
  end
158
158
  end
159
159
  private_constant :DependencySlot
@@ -459,11 +459,11 @@ module Dependabot
459
459
  end
460
460
 
461
461
  def version_class
462
- @version_class ||= Utils.version_class_for_package_manager(dependency.package_manager)
462
+ @version_class ||= dependency.version_class
463
463
  end
464
464
 
465
465
  def requirement_class
466
- @requirement_class ||= Utils.requirement_class_for_package_manager(dependency.package_manager)
466
+ @requirement_class ||= dependency.requirement_class
467
467
  end
468
468
 
469
469
  def local_repo_git_metadata_fetcher
@@ -164,7 +164,7 @@ module Dependabot
164
164
  end
165
165
 
166
166
  def version_class
167
- Utils.version_class_for_package_manager(dependency.package_manager)
167
+ dependency.version_class
168
168
  end
169
169
  end
170
170
  end
@@ -341,13 +341,11 @@ module Dependabot
341
341
  end
342
342
 
343
343
  def version_class
344
- Utils.version_class_for_package_manager(dependency.package_manager)
344
+ dependency.version_class
345
345
  end
346
346
 
347
347
  def requirement_class
348
- Utils.requirement_class_for_package_manager(
349
- dependency.package_manager
350
- )
348
+ dependency.requirement_class
351
349
  end
352
350
 
353
351
  def git_sha?(version)
@@ -186,7 +186,7 @@ module Dependabot
186
186
  end
187
187
 
188
188
  def version_class
189
- Utils.version_class_for_package_manager(dependency.package_manager)
189
+ dependency.version_class
190
190
  end
191
191
 
192
192
  def fetch_dependency_releases
@@ -0,0 +1,55 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Dependabot
4
+ class PullRequestCreator
5
+ class BranchNamer
6
+ class DependencyGroupStrategy
7
+ def initialize(dependencies:, files:, target_branch:, dependency_group:,
8
+ separator: "/", prefix: "dependabot", max_length: nil)
9
+ @dependencies = dependencies
10
+ @files = files
11
+ @target_branch = target_branch
12
+ @dependency_group = dependency_group
13
+ @separator = separator
14
+ @prefix = prefix
15
+ @max_length = max_length
16
+ end
17
+
18
+ # FIXME: Incorporate max_length truncation once we allow user config
19
+ #
20
+ # For now, we are using a placeholder DependencyGroup with a
21
+ # fixed-length name, so we can punt on handling truncation until
22
+ # we determine the strict validation rules for names
23
+ def new_branch_name
24
+ File.join(prefixes, dependency_group.name, prototype_suffix).gsub("/", separator)
25
+ end
26
+
27
+ private
28
+
29
+ attr_reader :dependencies, :dependency_group, :files, :target_branch, :separator, :prefix, :max_length
30
+
31
+ def prefixes
32
+ [
33
+ prefix,
34
+ package_manager,
35
+ directory,
36
+ target_branch
37
+ ].compact
38
+ end
39
+
40
+ # FIXME: Remove once grouped PRs can supersede each other
41
+ def prototype_suffix
42
+ "prototype-#{Time.now.utc.to_i}"
43
+ end
44
+
45
+ def package_manager
46
+ dependencies.first.package_manager
47
+ end
48
+
49
+ def directory
50
+ files.first.directory.tr(" ", "-")
51
+ end
52
+ end
53
+ end
54
+ end
55
+ end
@@ -5,18 +5,19 @@ require "digest"
5
5
  require "dependabot/metadata_finders"
6
6
  require "dependabot/pull_request_creator"
7
7
  require "dependabot/pull_request_creator/branch_namer/solo_strategy"
8
+ require "dependabot/pull_request_creator/branch_namer/dependency_group_strategy"
8
9
 
9
10
  module Dependabot
10
11
  class PullRequestCreator
11
12
  class BranchNamer
12
- attr_reader :dependencies, :files, :target_branch, :separator, :prefix, :max_length, :group_rule
13
+ attr_reader :dependencies, :files, :target_branch, :separator, :prefix, :max_length, :dependency_group
13
14
 
14
- def initialize(dependencies:, files:, target_branch:, group_rule: nil,
15
+ def initialize(dependencies:, files:, target_branch:, dependency_group: nil,
15
16
  separator: "/", prefix: "dependabot", max_length: nil)
16
17
  @dependencies = dependencies
17
18
  @files = files
18
19
  @target_branch = target_branch
19
- @group_rule = group_rule
20
+ @dependency_group = dependency_group
20
21
  @separator = separator
21
22
  @prefix = prefix
22
23
  @max_length = max_length
@@ -30,7 +31,7 @@ module Dependabot
30
31
 
31
32
  def strategy
32
33
  @strategy ||=
33
- if group_rule.nil?
34
+ if dependency_group.nil?
34
35
  SoloStrategy.new(
35
36
  dependencies: dependencies,
36
37
  files: files,
@@ -40,11 +41,11 @@ module Dependabot
40
41
  max_length: max_length
41
42
  )
42
43
  else
43
- GroupRuleStrategy.new(
44
+ DependencyGroupStrategy.new(
44
45
  dependencies: dependencies,
45
46
  files: files,
46
47
  target_branch: target_branch,
47
- group_rule: group_rule,
48
+ dependency_group: dependency_group,
48
49
  separator: separator,
49
50
  prefix: prefix,
50
51
  max_length: max_length
@@ -3,6 +3,7 @@
3
3
  require "pathname"
4
4
  require "dependabot/clients/github_with_retries"
5
5
  require "dependabot/clients/gitlab_with_retries"
6
+ require "dependabot/dependency_group"
6
7
  require "dependabot/logger"
7
8
  require "dependabot/metadata_finders"
8
9
  require "dependabot/pull_request_creator"
@@ -21,12 +22,13 @@ module Dependabot
21
22
  attr_reader :source, :dependencies, :files, :credentials,
22
23
  :pr_message_header, :pr_message_footer,
23
24
  :commit_message_options, :vulnerabilities_fixed,
24
- :github_redirection_service
25
+ :github_redirection_service, :dependency_group
25
26
 
26
27
  def initialize(source:, dependencies:, files:, credentials:,
27
28
  pr_message_header: nil, pr_message_footer: nil,
28
29
  commit_message_options: {}, vulnerabilities_fixed: {},
29
- github_redirection_service: DEFAULT_GITHUB_REDIRECTION_SERVICE)
30
+ github_redirection_service: DEFAULT_GITHUB_REDIRECTION_SERVICE,
31
+ dependency_group: nil)
30
32
  @dependencies = dependencies
31
33
  @files = files
32
34
  @source = source
@@ -36,23 +38,17 @@ module Dependabot
36
38
  @commit_message_options = commit_message_options
37
39
  @vulnerabilities_fixed = vulnerabilities_fixed
38
40
  @github_redirection_service = github_redirection_service
41
+ @dependency_group = dependency_group
39
42
  end
40
43
 
41
44
  def pr_name
42
- begin
43
- pr_name = pr_name_prefixer.pr_name_prefix
44
- rescue StandardError => e
45
- Dependabot.logger.error("Error while generating PR name: #{e.message}")
46
- pr_name = ""
47
- end
48
- pr_name += library? ? library_pr_name : application_pr_name
49
- return pr_name if files.first.directory == "/"
50
-
51
- pr_name + " in #{files.first.directory}"
45
+ name = dependency_group ? group_pr_name : solo_pr_name
46
+ name[0] = name[0].capitalize if pr_name_prefixer.capitalize_first_word?
47
+ "#{pr_name_prefix}#{name}"
52
48
  end
53
49
 
54
50
  def pr_message
55
- suffixed_pr_message_header + commit_message_intro + \
51
+ suffixed_pr_message_header + commit_message_intro +
56
52
  metadata_cascades + prefixed_pr_message_footer
57
53
  rescue StandardError => e
58
54
  Dependabot.logger.error("Error while generating PR message: #{e.message}")
@@ -82,11 +78,13 @@ module Dependabot
82
78
 
83
79
  private
84
80
 
85
- def library_pr_name
86
- pr_name = "update "
87
- pr_name = pr_name.capitalize if pr_name_prefixer.capitalize_first_word?
81
+ def solo_pr_name
82
+ name = library? ? library_pr_name : application_pr_name
83
+ "#{name}#{pr_name_directory}"
84
+ end
88
85
 
89
- pr_name +
86
+ def library_pr_name
87
+ "update " +
90
88
  if dependencies.count == 1
91
89
  "#{dependencies.first.display_name} requirement " \
92
90
  "#{from_version_msg(old_library_requirement(dependencies.first))}" \
@@ -101,12 +99,8 @@ module Dependabot
101
99
  end
102
100
  end
103
101
 
104
- # rubocop:disable Metrics/AbcSize
105
102
  def application_pr_name
106
- pr_name = "bump "
107
- pr_name = pr_name.capitalize if pr_name_prefixer.capitalize_first_word?
108
-
109
- pr_name +
103
+ "bump " +
110
104
  if dependencies.count == 1
111
105
  dependency = dependencies.first
112
106
  "#{dependency.display_name} " \
@@ -131,10 +125,23 @@ module Dependabot
131
125
  end
132
126
  end
133
127
  end
134
- # rubocop:enable Metrics/AbcSize
128
+
129
+ def group_pr_name
130
+ updates = dependencies.map(&:name).uniq.count
131
+ "bump the #{dependency_group.name} group#{pr_name_directory} with #{updates} update#{'s' if updates > 1}"
132
+ end
135
133
 
136
134
  def pr_name_prefix
137
135
  pr_name_prefixer.pr_name_prefix
136
+ rescue StandardError => e
137
+ Dependabot.logger.error("Error while generating PR name: #{e.message}")
138
+ ""
139
+ end
140
+
141
+ def pr_name_directory
142
+ return "" if files.first.directory == "/"
143
+
144
+ " in #{files.first.directory}"
138
145
  end
139
146
 
140
147
  def commit_subject
@@ -49,7 +49,7 @@ module Dependabot
49
49
  :commit_message_options, :vulnerabilities_fixed,
50
50
  :reviewers, :assignees, :milestone, :branch_name_separator,
51
51
  :branch_name_prefix, :branch_name_max_length, :github_redirection_service,
52
- :custom_headers, :provider_metadata
52
+ :custom_headers, :provider_metadata, :dependency_group
53
53
 
54
54
  def initialize(source:, base_commit:, dependencies:, files:, credentials:,
55
55
  pr_message_header: nil, pr_message_footer: nil,
@@ -61,7 +61,7 @@ module Dependabot
61
61
  automerge_candidate: false,
62
62
  github_redirection_service: DEFAULT_GITHUB_REDIRECTION_SERVICE,
63
63
  custom_headers: nil, require_up_to_date_base: false,
64
- provider_metadata: {}, message: nil)
64
+ provider_metadata: {}, message: nil, dependency_group: nil)
65
65
  @dependencies = dependencies
66
66
  @source = source
67
67
  @base_commit = base_commit
@@ -87,6 +87,7 @@ module Dependabot
87
87
  @require_up_to_date_base = require_up_to_date_base
88
88
  @provider_metadata = provider_metadata
89
89
  @message = message
90
+ @dependency_group = dependency_group
90
91
 
91
92
  check_dependencies_have_previous_version
92
93
  end
@@ -225,7 +226,8 @@ module Dependabot
225
226
  pr_message_header: pr_message_header,
226
227
  pr_message_footer: pr_message_footer,
227
228
  vulnerabilities_fixed: vulnerabilities_fixed,
228
- github_redirection_service: github_redirection_service
229
+ github_redirection_service: github_redirection_service,
230
+ dependency_group: dependency_group
229
231
  )
230
232
  end
231
233
 
@@ -235,7 +237,7 @@ module Dependabot
235
237
  dependencies: dependencies,
236
238
  files: files,
237
239
  target_branch: source.branch,
238
- group_rule: nil,
240
+ dependency_group: dependency_group,
239
241
  separator: branch_name_separator,
240
242
  prefix: branch_name_prefix,
241
243
  max_length: branch_name_max_length
@@ -113,11 +113,11 @@ module Dependabot
113
113
  end
114
114
 
115
115
  def version_class
116
- Utils.version_class_for_package_manager(dependency.package_manager)
116
+ dependency.version_class
117
117
  end
118
118
 
119
119
  def requirement_class
120
- Utils.requirement_class_for_package_manager(dependency.package_manager)
120
+ dependency.requirement_class
121
121
  end
122
122
 
123
123
  # For some languages, the manifest file may be constructed such that
data/lib/dependabot.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Dependabot
4
- VERSION = "0.216.0"
4
+ VERSION = "0.216.2"
5
5
  end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ class WildcardMatcher
4
+ def self.match?(wildcard_string, candidate_string)
5
+ return false unless wildcard_string && candidate_string
6
+
7
+ regex_string = "a#{wildcard_string.downcase}a".split("*").
8
+ map { |p| Regexp.quote(p) }.
9
+ join(".*").gsub(/^a|a$/, "")
10
+ regex = /^#{regex_string}$/
11
+ regex.match?(candidate_string.downcase)
12
+ end
13
+ 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.216.0
4
+ version: 0.216.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dependabot
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-04-12 00:00:00.000000000 Z
11
+ date: 2023-04-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: aws-sdk-codecommit
@@ -318,14 +318,14 @@ dependencies:
318
318
  requirements:
319
319
  - - "~>"
320
320
  - !ruby/object:Gem::Version
321
- version: 1.48.0
321
+ version: 1.50.0
322
322
  type: :development
323
323
  prerelease: false
324
324
  version_requirements: !ruby/object:Gem::Requirement
325
325
  requirements:
326
326
  - - "~>"
327
327
  - !ruby/object:Gem::Version
328
- version: 1.48.0
328
+ version: 1.50.0
329
329
  - !ruby/object:Gem::Dependency
330
330
  name: rubocop-performance
331
331
  requirement: !ruby/object:Gem::Requirement
@@ -432,6 +432,7 @@ files:
432
432
  - lib/dependabot/config/update_config.rb
433
433
  - lib/dependabot/dependency.rb
434
434
  - lib/dependabot/dependency_file.rb
435
+ - lib/dependabot/dependency_group.rb
435
436
  - lib/dependabot/errors.rb
436
437
  - lib/dependabot/experiments.rb
437
438
  - lib/dependabot/file_fetchers.rb
@@ -447,7 +448,6 @@ files:
447
448
  - lib/dependabot/file_updaters/vendor_updater.rb
448
449
  - lib/dependabot/git_commit_checker.rb
449
450
  - lib/dependabot/git_metadata_fetcher.rb
450
- - lib/dependabot/group_rule.rb
451
451
  - lib/dependabot/logger.rb
452
452
  - lib/dependabot/metadata_finders.rb
453
453
  - lib/dependabot/metadata_finders/README.md
@@ -460,7 +460,7 @@ files:
460
460
  - lib/dependabot/pull_request_creator/azure.rb
461
461
  - lib/dependabot/pull_request_creator/bitbucket.rb
462
462
  - lib/dependabot/pull_request_creator/branch_namer.rb
463
- - lib/dependabot/pull_request_creator/branch_namer/group_rule_strategy.rb
463
+ - lib/dependabot/pull_request_creator/branch_namer/dependency_group_strategy.rb
464
464
  - lib/dependabot/pull_request_creator/branch_namer/solo_strategy.rb
465
465
  - lib/dependabot/pull_request_creator/codecommit.rb
466
466
  - lib/dependabot/pull_request_creator/commit_signer.rb
@@ -488,6 +488,7 @@ files:
488
488
  - lib/dependabot/update_checkers/version_filters.rb
489
489
  - lib/dependabot/utils.rb
490
490
  - lib/dependabot/version.rb
491
+ - lib/wildcard_matcher.rb
491
492
  homepage: https://github.com/dependabot/dependabot-core
492
493
  licenses:
493
494
  - Nonstandard
@@ -1,11 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Dependabot
4
- class GroupRule
5
- attr_reader :name
6
-
7
- def initialize(name)
8
- @name = name
9
- end
10
- end
11
- end
@@ -1,28 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Dependabot
4
- class PullRequestCreator
5
- class BranchNamer
6
- class GroupRuleStrategy
7
- def initialize(dependencies:, files:, target_branch:, group_rule:,
8
- separator: "/", prefix: "dependabot", max_length: nil)
9
- @dependencies = dependencies
10
- @files = files
11
- @target_branch = target_branch
12
- @group_rule = group_rule
13
- @separator = separator
14
- @prefix = prefix
15
- @max_length = max_length
16
- end
17
-
18
- def new_branch_name
19
- group_rule.name
20
- end
21
-
22
- private
23
-
24
- attr_reader :group_rule
25
- end
26
- end
27
- end
28
- end