dependabot-gradle 0.215.0 → 0.216.1

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: 7e223088cfb853514d78488b2466529cf5982f0ed6428d8bbaf0b4bb6382571f
4
- data.tar.gz: d4b4f1ebe4ea8083103c0b8814375ec6daa7a88a55cb2383cc108a8f861521b0
3
+ metadata.gz: 47c7fa3d422bfa791f48a4f796897838fc7948ac78d2129399da2a55aa2170ad
4
+ data.tar.gz: c33eac27a234ce45bbbbfa43068cc886e52f5efc1eda40f85f00fafecb17220c
5
5
  SHA512:
6
- metadata.gz: 912a17930c34b96e1d45bdf69c7f6ede34ed850a2daf160f55e3d03f55fe37617bbdda7d71e987c1e0cec48a55274e123b4d85734b7fea8262abc47b40ae5a6c
7
- data.tar.gz: ed3aca0dd819d82bdcecc6abf7d76f96fccdedcb0384e3f04c50e2e1e7c214df4d40ef90b67325b34773d0841fc8de23038412ab0e02decc583aec244300c5df
6
+ metadata.gz: dc31a67dafd54796e734cba8d2d7f4663e67632d3ceecb0546c91099b267ddcb95d6684a3fa15c96ad2fbe0ad8065255f78979a105991c119b42934d0040c827
7
+ data.tar.gz: 8a1c09a283fe04c81bf6c6ee76367a78130ef5badd7f77938f718a9a88b07e7ed085b207e8fc872a676f41b41ee1c55e9030a00ca28c42f140fe8ee3cbc3aacf
@@ -14,6 +14,10 @@ module Dependabot
14
14
  SUPPORTED_SETTINGS_FILE_NAMES =
15
15
  %w(settings.gradle settings.gradle.kts).freeze
16
16
 
17
+ # For now Gradle only supports libray .toml files in the main gradle folder
18
+ SUPPORTED_VERSION_CATALOG_FILE_PATH =
19
+ %w(/gradle/libs.versions.toml).freeze
20
+
17
21
  def self.required_files_in?(filenames)
18
22
  filenames.any? do |filename|
19
23
  SUPPORTED_BUILD_FILE_NAMES.include?(filename)
@@ -33,7 +37,7 @@ module Dependabot
33
37
  end
34
38
 
35
39
  def all_buildfiles_in_build(root_dir)
36
- files = [buildfile(root_dir), settings_file(root_dir)].compact
40
+ files = [buildfile(root_dir), settings_file(root_dir), version_catalog_file(root_dir)].compact
37
41
  files += subproject_buildfiles(root_dir)
38
42
  files += dependency_script_plugins(root_dir)
39
43
  files + included_builds(root_dir).
@@ -82,6 +86,15 @@ module Dependabot
82
86
  end
83
87
  end
84
88
 
89
+ def version_catalog_file(root_dir)
90
+ return nil unless root_dir == "."
91
+
92
+ gradle_toml_file(root_dir)
93
+ rescue Dependabot::DependencyFileNotFound
94
+ # Catalog file is optional for Gradle
95
+ nil
96
+ end
97
+
85
98
  # rubocop:disable Metrics/PerceivedComplexity
86
99
  def dependency_script_plugins(root_dir)
87
100
  return [] unless buildfile(root_dir)
@@ -127,6 +140,10 @@ module Dependabot
127
140
  file
128
141
  end
129
142
 
143
+ def gradle_toml_file(dir)
144
+ find_first(dir, SUPPORTED_VERSION_CATALOG_FILE_PATH)
145
+ end
146
+
130
147
  def settings_file(dir)
131
148
  find_first(dir, SUPPORTED_SETTINGS_FILE_NAMES)
132
149
  end
@@ -86,7 +86,7 @@ module Dependabot
86
86
  all_files = [callsite_buildfile, top_level_buildfile].concat(
87
87
  FileParser.find_includes(callsite_buildfile, dependency_files),
88
88
  FileParser.find_includes(top_level_buildfile, dependency_files)
89
- )
89
+ ).compact
90
90
  all_files.each do |file|
91
91
  details = properties(file).fetch(property_name, nil)
92
92
  return details if details
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "toml-rb"
4
+
3
5
  require "dependabot/dependency"
4
6
  require "dependabot/file_parsers"
5
7
  require "dependabot/file_parsers/base"
@@ -44,7 +46,12 @@ module Dependabot
44
46
  script_plugin_files.each do |plugin_file|
45
47
  dependency_set += buildfile_dependencies(plugin_file)
46
48
  end
47
- dependency_set.dependencies
49
+ version_catalog_file.each do |toml_file|
50
+ dependency_set += version_catalog_dependencies(toml_file)
51
+ end
52
+ dependency_set.dependencies.reject do |dependency|
53
+ dependency.version == "latest.integration" || dependency.version == "latest.release"
54
+ end
48
55
  end
49
56
 
50
57
  def self.find_include_names(buildfile)
@@ -62,6 +69,65 @@ module Dependabot
62
69
 
63
70
  private
64
71
 
72
+ def version_catalog_dependencies(toml_file)
73
+ dependency_set = DependencySet.new
74
+ parsed_toml_file = parsed_toml_file(toml_file)
75
+ dependency_set += version_catalog_library_dependencies(parsed_toml_file, toml_file)
76
+ dependency_set += version_catalog_plugin_dependencies(parsed_toml_file, toml_file)
77
+ dependency_set
78
+ end
79
+
80
+ def version_catalog_library_dependencies(parsed_toml_file, toml_file)
81
+ dependencies_for_declarations(parsed_toml_file["libraries"], toml_file, :details_for_library_dependency)
82
+ end
83
+
84
+ def version_catalog_plugin_dependencies(parsed_toml_file, toml_file)
85
+ dependencies_for_declarations(parsed_toml_file["plugins"], toml_file, :details_for_plugin_dependency)
86
+ end
87
+
88
+ def dependencies_for_declarations(declarations, toml_file, details_getter)
89
+ dependency_set = DependencySet.new
90
+ return dependency_set unless declarations
91
+
92
+ declarations.each do |_mod, declaration|
93
+ group, name, version = send(details_getter, declaration)
94
+
95
+ # Only support basic version and reference formats for now,
96
+ # refrain from updating anything else as it's likely to be a very deliberate choice.
97
+ next unless Gradle::Version.correct?(version) || (version.is_a?(Hash) && version.key?("ref"))
98
+
99
+ version_details = Gradle::Version.correct?(version) ? version : "$" + version["ref"]
100
+ details = { group: group, name: name, version: version_details }
101
+ dependency = dependency_from(details_hash: details, buildfile: toml_file)
102
+ next unless dependency
103
+
104
+ dependency_set << dependency
105
+ end
106
+ dependency_set
107
+ end
108
+
109
+ def details_for_library_dependency(declaration)
110
+ return declaration.split(":") if declaration.is_a?(String)
111
+
112
+ if declaration["module"]
113
+ [*declaration["module"].split(":"), declaration["version"]]
114
+ else
115
+ [declaration["group"], declaration["name"], declaration["version"]]
116
+ end
117
+ end
118
+
119
+ def details_for_plugin_dependency(declaration)
120
+ return ["plugins", *declaration.split(":")] if declaration.is_a?(String)
121
+
122
+ ["plugins", declaration["id"], declaration["version"]]
123
+ end
124
+
125
+ def parsed_toml_file(file)
126
+ TomlRB.parse(file.content)
127
+ rescue TomlRB::ParseError, TomlRB::ValueOverwriteError
128
+ raise Dependabot::DependencyFileNotParseable, file.path
129
+ end
130
+
65
131
  def map_value_regex(key)
66
132
  /(?:^|\s|,|\()#{Regexp.quote(key)}(\s*=|:)\s*['"](?<value>[^'"]+)['"]/
67
133
  end
@@ -160,7 +226,7 @@ module Dependabot
160
226
  blk.lines.each do |line|
161
227
  name_regex = /(id|kotlin)(\s+#{PLUGIN_ID_REGEX}|\(#{PLUGIN_ID_REGEX}\))/o
162
228
  name = line.match(name_regex)&.named_captures&.fetch("id")
163
- version_regex = /version\s+['"]?(?<version>#{VSN_PART})['"]?/o
229
+ version_regex = /version\s+(?<version>['"]?#{VSN_PART}['"]?)/o
164
230
  version = format_plugin_version(line.match(version_regex)&.named_captures&.fetch("version"))
165
231
  next unless name && version
166
232
 
@@ -174,7 +240,7 @@ module Dependabot
174
240
  end
175
241
 
176
242
  def format_plugin_version(version)
177
- version&.match?(/^\w+$/) ? "$#{version}" : version
243
+ quoted?(version) ? unquote(version) : "$#{version}"
178
244
  end
179
245
 
180
246
  def extra_groups(line)
@@ -314,6 +380,12 @@ module Dependabot
314
380
  end
315
381
  end
316
382
 
383
+ def version_catalog_file
384
+ @version_catalog_file ||= dependency_files.select do |f|
385
+ f.name.end_with?("libs.versions.toml")
386
+ end
387
+ end
388
+
317
389
  def script_plugin_files
318
390
  @script_plugin_files ||=
319
391
  buildfiles.flat_map do |buildfile|
@@ -331,6 +403,14 @@ module Dependabot
331
403
  SUPPORTED_BUILD_FILE_NAMES.include?(f.name)
332
404
  end
333
405
  end
406
+
407
+ def quoted?(string)
408
+ string&.match?(/^['"].*['"]$/)
409
+ end
410
+
411
+ def unquote(string)
412
+ string[1..-2]
413
+ end
334
414
  end
335
415
  end
336
416
  end
@@ -112,32 +112,38 @@ module Dependabot
112
112
 
113
113
  def update_version_in_buildfile(dependency, buildfile, previous_req,
114
114
  requirement)
115
+ original_content = buildfile.content.dup
116
+
115
117
  updated_content =
116
- buildfile.content.gsub(
117
- original_buildfile_declaration(dependency, previous_req),
118
- updated_buildfile_declaration(
119
- dependency,
120
- previous_req,
121
- requirement
118
+ original_buildfile_declarations(dependency, previous_req).reduce(original_content) do |content, declaration|
119
+ content.gsub(
120
+ declaration,
121
+ updated_buildfile_declaration(
122
+ declaration,
123
+ previous_req,
124
+ requirement
125
+ )
122
126
  )
123
- )
127
+ end
124
128
 
125
129
  raise "Expected content to change!" if updated_content == buildfile.content
126
130
 
127
131
  updated_file(file: buildfile, content: updated_content)
128
132
  end
129
133
 
130
- def original_buildfile_declaration(dependency, requirement)
134
+ def original_buildfile_declarations(dependency, requirement)
131
135
  # This implementation is limited to declarations that appear on a
132
136
  # single line.
133
137
  buildfile = buildfiles.find { |f| f.name == requirement.fetch(:file) }
134
- buildfile.content.lines.find do |line|
138
+ buildfile.content.lines.select do |line|
135
139
  line = evaluate_properties(line, buildfile)
136
140
  line = line.gsub(%r{(?<=^|\s)//.*$}, "")
137
141
 
138
142
  if dependency.name.include?(":")
139
143
  next false unless line.include?(dependency.name.split(":").first)
140
144
  next false unless line.include?(dependency.name.split(":").last)
145
+ elsif requirement.fetch(:file).end_with?(".toml")
146
+ next false unless line.include?(dependency.name)
141
147
  else
142
148
  name_regex_value = /['"]#{Regexp.quote(dependency.name)}['"]/
143
149
  name_regex = /(id|kotlin)(\s+#{name_regex_value}|\(#{name_regex_value}\))/
@@ -171,10 +177,10 @@ module Dependabot
171
177
  new(dependency_files: dependency_files)
172
178
  end
173
179
 
174
- def updated_buildfile_declaration(dependency, previous_req, requirement)
180
+ def updated_buildfile_declaration(original_buildfile_declaration, previous_req, requirement)
175
181
  original_req_string = previous_req.fetch(:requirement)
176
182
 
177
- original_buildfile_declaration(dependency, previous_req).gsub(
183
+ original_buildfile_declaration.gsub(
178
184
  original_req_string,
179
185
  requirement.fetch(:requirement)
180
186
  )
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "dependabot/version"
3
4
  require "dependabot/utils"
4
- require "rubygems_version_patch"
5
5
 
6
6
  # Java versions use dots and dashes when tokenising their versions.
7
7
  # Gem::Version converts a "-" to ".pre.", so we override the `to_s` method.
@@ -10,7 +10,7 @@ require "rubygems_version_patch"
10
10
 
11
11
  module Dependabot
12
12
  module Gradle
13
- class Version < Gem::Version
13
+ class Version < Dependabot::Version
14
14
  NULL_VALUES = %w(0 final ga).freeze
15
15
  PREFIXED_TOKEN_HIERARCHY = {
16
16
  "." => { qualifier: 1, number: 4 },
@@ -22,6 +22,6 @@ Dependabot::Dependency.
22
22
  "gradle",
23
23
  lambda { |name|
24
24
  artifact_id = name.split(":").last
25
- %w(bom library).include?(artifact_id) ? name : artifact_id
25
+ name.length <= 100 ? name : artifact_id
26
26
  }
27
27
  )
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dependabot-gradle
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.215.0
4
+ version: 0.216.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dependabot
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-12-07 00:00:00.000000000 Z
11
+ date: 2023-04-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: dependabot-common
@@ -16,42 +16,42 @@ dependencies:
16
16
  requirements:
17
17
  - - '='
18
18
  - !ruby/object:Gem::Version
19
- version: 0.215.0
19
+ version: 0.216.1
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.215.0
26
+ version: 0.216.1
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: dependabot-maven
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - '='
32
32
  - !ruby/object:Gem::Version
33
- version: 0.215.0
33
+ version: 0.216.1
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - '='
39
39
  - !ruby/object:Gem::Version
40
- version: 0.215.0
40
+ version: 0.216.1
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: debug
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ">="
45
+ - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: 1.0.0
47
+ version: 1.7.1
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ">="
52
+ - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: 1.0.0
54
+ version: 1.7.1
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: gpgme
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -72,14 +72,14 @@ dependencies:
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: 4.0.0
75
+ version: 4.2.0
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: 4.0.0
82
+ version: 4.2.0
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: rake
85
85
  requirement: !ruby/object:Gem::Requirement
@@ -100,70 +100,70 @@ dependencies:
100
100
  requirements:
101
101
  - - "~>"
102
102
  - !ruby/object:Gem::Version
103
- version: '3.8'
103
+ version: '3.12'
104
104
  type: :development
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
108
  - - "~>"
109
109
  - !ruby/object:Gem::Version
110
- version: '3.8'
110
+ version: '3.12'
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: rspec-its
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
115
  - - "~>"
116
116
  - !ruby/object:Gem::Version
117
- version: '1.2'
117
+ version: '1.3'
118
118
  type: :development
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
122
  - - "~>"
123
123
  - !ruby/object:Gem::Version
124
- version: '1.2'
124
+ version: '1.3'
125
125
  - !ruby/object:Gem::Dependency
126
126
  name: rubocop
127
127
  requirement: !ruby/object:Gem::Requirement
128
128
  requirements:
129
129
  - - "~>"
130
130
  - !ruby/object:Gem::Version
131
- version: 1.39.0
131
+ version: 1.50.0
132
132
  type: :development
133
133
  prerelease: false
134
134
  version_requirements: !ruby/object:Gem::Requirement
135
135
  requirements:
136
136
  - - "~>"
137
137
  - !ruby/object:Gem::Version
138
- version: 1.39.0
138
+ version: 1.50.0
139
139
  - !ruby/object:Gem::Dependency
140
140
  name: rubocop-performance
141
141
  requirement: !ruby/object:Gem::Requirement
142
142
  requirements:
143
143
  - - "~>"
144
144
  - !ruby/object:Gem::Version
145
- version: 1.15.0
145
+ version: 1.17.1
146
146
  type: :development
147
147
  prerelease: false
148
148
  version_requirements: !ruby/object:Gem::Requirement
149
149
  requirements:
150
150
  - - "~>"
151
151
  - !ruby/object:Gem::Version
152
- version: 1.15.0
152
+ version: 1.17.1
153
153
  - !ruby/object:Gem::Dependency
154
154
  name: simplecov
155
155
  requirement: !ruby/object:Gem::Requirement
156
156
  requirements:
157
157
  - - "~>"
158
158
  - !ruby/object:Gem::Version
159
- version: 0.21.0
159
+ version: 0.22.0
160
160
  type: :development
161
161
  prerelease: false
162
162
  version_requirements: !ruby/object:Gem::Requirement
163
163
  requirements:
164
164
  - - "~>"
165
165
  - !ruby/object:Gem::Version
166
- version: 0.21.0
166
+ version: 0.22.0
167
167
  - !ruby/object:Gem::Dependency
168
168
  name: simplecov-console
169
169
  requirement: !ruby/object:Gem::Requirement
@@ -196,33 +196,34 @@ dependencies:
196
196
  name: vcr
197
197
  requirement: !ruby/object:Gem::Requirement
198
198
  requirements:
199
- - - '='
199
+ - - "~>"
200
200
  - !ruby/object:Gem::Version
201
- version: 6.1.0
201
+ version: '6.1'
202
202
  type: :development
203
203
  prerelease: false
204
204
  version_requirements: !ruby/object:Gem::Requirement
205
205
  requirements:
206
- - - '='
206
+ - - "~>"
207
207
  - !ruby/object:Gem::Version
208
- version: 6.1.0
208
+ version: '6.1'
209
209
  - !ruby/object:Gem::Dependency
210
210
  name: webmock
211
211
  requirement: !ruby/object:Gem::Requirement
212
212
  requirements:
213
213
  - - "~>"
214
214
  - !ruby/object:Gem::Version
215
- version: '3.4'
215
+ version: '3.18'
216
216
  type: :development
217
217
  prerelease: false
218
218
  version_requirements: !ruby/object:Gem::Requirement
219
219
  requirements:
220
220
  - - "~>"
221
221
  - !ruby/object:Gem::Version
222
- version: '3.4'
223
- description: Automated dependency management for Ruby, JavaScript, Python, PHP, Elixir,
224
- Rust, Java, .NET, Elm and Go
225
- email: support@dependabot.com
222
+ version: '3.18'
223
+ description: Dependabot-Gradle provides support for bumping Gradle packages via Dependabot.
224
+ If you want support for multiple package managers, you probably want the meta-gem
225
+ dependabot-omnibus.
226
+ email: opensource@github.com
226
227
  executables: []
227
228
  extensions: []
228
229
  extra_rdoc_files: []
@@ -246,7 +247,9 @@ files:
246
247
  homepage: https://github.com/dependabot/dependabot-core
247
248
  licenses:
248
249
  - Nonstandard
249
- metadata: {}
250
+ metadata:
251
+ issue_tracker_uri: https://github.com/dependabot/dependabot-core/issues
252
+ changelog_uri: https://github.com/dependabot/dependabot-core/blob/main/CHANGELOG.md
250
253
  post_install_message:
251
254
  rdoc_options: []
252
255
  require_paths:
@@ -262,8 +265,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
262
265
  - !ruby/object:Gem::Version
263
266
  version: 3.1.0
264
267
  requirements: []
265
- rubygems_version: 3.3.7
268
+ rubygems_version: 3.3.26
266
269
  signing_key:
267
270
  specification_version: 4
268
- summary: Gradle support for dependabot
271
+ summary: Provides Dependabot support for Gradle
269
272
  test_files: []