dependabot-common 0.216.0 → 0.216.2

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: 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