dependabot-gradle 0.211.0 → 0.213.0

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: 87960ca41a7fc3ec723a12d585ba7c6614b49c24649c215ecd9a83704a3f1d21
4
- data.tar.gz: 387a7b664d2f48d4c66f317274ca203f202cc35c4cfb5990297eec37a12fc188
3
+ metadata.gz: 0fca8a86a99ff839c2a950ce045feffc4deb167ea7d45afb649d9c29c381b349
4
+ data.tar.gz: 99d3c12427a0dc2a89956f5dc27499e6176dc76c9b734b47a6e9fc7799616b2a
5
5
  SHA512:
6
- metadata.gz: f68d5905f52f29e5f4a39841b26b00852f0b86c4e07cbfd26d2a74aca8528926579109992831de2e8e7c4c80001bb9d0bb35f18002b7adfb6f2ca646918bee49
7
- data.tar.gz: 0bf43c70fc7099c2067c40e400e0523466289d4cad3ebba4c3255b172ff42258c9c4170aae2293d1cc810623035e492daa693007dc7fccaa703dc9848019d837
6
+ metadata.gz: 7aa6c8213da114c8ae5bfe35918f4cb045f18d0b5981617b38cf660bbc544b1767958dceb737c6fe51926327a474a6605092cb02f0ac32e41877d28947dac22d
7
+ data.tar.gz: e97bed5144eee699defa0a2c35138529a6cd829c837ea479ac69355a87a7d2602f9e0367799dcd54bf565a1099df6d922865e2e0149268fce9fa720a7743528d
@@ -10,13 +10,22 @@ module Dependabot
10
10
  @settings_file = settings_file
11
11
  end
12
12
 
13
+ def included_build_paths
14
+ paths = []
15
+ comment_free_content.scan(function_regex("includeBuild")) do
16
+ arg = Regexp.last_match.named_captures.fetch("args")
17
+ paths << arg.gsub(/["']/, "").strip
18
+ end
19
+ paths.uniq
20
+ end
21
+
13
22
  def subproject_paths
14
23
  subprojects = []
15
24
 
16
25
  comment_free_content.scan(function_regex("include")) do
17
26
  args = Regexp.last_match.named_captures.fetch("args")
18
27
  args = args.split(",")
19
- args = args.map { |p| p.gsub(/["']/, "").strip }.compact
28
+ args = args.filter_map { |p| p.gsub(/["']/, "").strip }
20
29
  subprojects += args
21
30
  end
22
31
 
@@ -27,72 +27,89 @@ module Dependabot
27
27
  private
28
28
 
29
29
  def fetch_files
30
- fetched_files = []
31
- fetched_files << buildfile if buildfile
32
- fetched_files << settings_file if settings_file
33
- fetched_files += subproject_buildfiles
34
- fetched_files += dependency_script_plugins
35
- check_required_files_present
36
- fetched_files
30
+ files = all_buildfiles_in_build(".")
31
+ check_required_files_present(files)
32
+ files
37
33
  end
38
34
 
39
- def buildfile
40
- @buildfile ||= begin
41
- file = supported_build_file
42
- @buildfile_name ||= file.name if file
43
- file
44
- end
35
+ def all_buildfiles_in_build(root_dir)
36
+ files = [buildfile(root_dir), settings_file(root_dir)].compact
37
+ files += subproject_buildfiles(root_dir)
38
+ files += dependency_script_plugins(root_dir)
39
+ files + included_builds(root_dir).
40
+ flat_map { |dir| all_buildfiles_in_build(dir) }
41
+ end
42
+
43
+ def included_builds(root_dir)
44
+ builds = []
45
+
46
+ # buildSrc is implicit: included but not declared in settings.gradle
47
+ buildsrc = repo_contents(dir: root_dir, raise_errors: false).
48
+ find { |item| item.type == "dir" && item.name == "buildSrc" }
49
+ builds << clean_join(root_dir, "buildSrc") if buildsrc
50
+
51
+ return builds unless settings_file(root_dir)
52
+
53
+ builds += SettingsFileParser.
54
+ new(settings_file: settings_file(root_dir)).
55
+ included_build_paths.
56
+ map { |p| clean_join(root_dir, p) }
57
+
58
+ builds.uniq
59
+ end
60
+
61
+ def clean_join(*parts)
62
+ Pathname.new(File.join(*parts)).cleanpath.to_path
45
63
  end
46
64
 
47
- def subproject_buildfiles
48
- return [] unless settings_file
49
-
50
- @subproject_buildfiles ||= begin
51
- subproject_paths =
52
- SettingsFileParser.
53
- new(settings_file: settings_file).
54
- subproject_paths
55
-
56
- subproject_paths.map do |path|
57
- if @buildfile_name
58
- fetch_file_from_host(File.join(path, @buildfile_name))
59
- else
60
- supported_file(SUPPORTED_BUILD_FILE_NAMES.map { |f| File.join(path, f) })
61
- end
62
- rescue Dependabot::DependencyFileNotFound
63
- # Gradle itself doesn't worry about missing subprojects, so we don't
64
- nil
65
- end.compact
65
+ def subproject_buildfiles(root_dir)
66
+ return [] unless settings_file(root_dir)
67
+
68
+ subproject_paths =
69
+ SettingsFileParser.
70
+ new(settings_file: settings_file(root_dir)).
71
+ subproject_paths
72
+
73
+ subproject_paths.filter_map do |path|
74
+ if @buildfile_name
75
+ fetch_file_from_host(File.join(root_dir, path, @buildfile_name))
76
+ else
77
+ buildfile(File.join(root_dir, path))
78
+ end
79
+ rescue Dependabot::DependencyFileNotFound
80
+ # Gradle itself doesn't worry about missing subprojects, so we don't
81
+ nil
66
82
  end
67
83
  end
68
84
 
69
85
  # rubocop:disable Metrics/PerceivedComplexity
70
- def dependency_script_plugins
71
- return [] unless buildfile
86
+ def dependency_script_plugins(root_dir)
87
+ return [] unless buildfile(root_dir)
72
88
 
73
89
  dependency_plugin_paths =
74
- FileParser.find_include_names(buildfile).
90
+ FileParser.find_include_names(buildfile(root_dir)).
75
91
  reject { |path| path.include?("://") }.
76
92
  reject { |path| !path.include?("/") && path.split(".").count > 2 }.
77
93
  select { |filename| filename.include?("dependencies") }.
78
94
  map { |path| path.gsub("$rootDir", ".") }.
95
+ map { |path| File.join(root_dir, path) }.
79
96
  uniq
80
97
 
81
- dependency_plugin_paths.map do |path|
98
+ dependency_plugin_paths.filter_map do |path|
82
99
  fetch_file_from_host(path)
83
100
  rescue Dependabot::DependencyFileNotFound
84
101
  next nil if file_exists_in_submodule?(path)
85
102
  next nil if path.include?("${")
86
103
 
87
104
  raise
88
- end.compact
105
+ end
89
106
  end
90
107
  # rubocop:enable Metrics/PerceivedComplexity
91
108
 
92
- def check_required_files_present
93
- return if buildfile || (subproject_buildfiles && !subproject_buildfiles.empty?)
109
+ def check_required_files_present(files)
110
+ return if files.any?
94
111
 
95
- path = Pathname.new(File.join(directory, "build.gradle")).cleanpath.to_path
112
+ path = clean_join(directory, "build.gradle")
96
113
  path += "(.kts)?"
97
114
  raise Dependabot::DependencyFileNotFound, path
98
115
  end
@@ -104,24 +121,35 @@ module Dependabot
104
121
  false
105
122
  end
106
123
 
107
- def settings_file
108
- @settings_file ||= supported_settings_file
124
+ def buildfile(dir)
125
+ file = find_first(dir, SUPPORTED_BUILD_FILE_NAMES) || return
126
+ @buildfile_name ||= File.basename(file.name)
127
+ file
109
128
  end
110
129
 
111
- def supported_build_file
112
- supported_file(SUPPORTED_BUILD_FILE_NAMES)
130
+ def settings_file(dir)
131
+ find_first(dir, SUPPORTED_SETTINGS_FILE_NAMES)
113
132
  end
114
133
 
115
- def supported_settings_file
116
- supported_file(SUPPORTED_SETTINGS_FILE_NAMES)
134
+ def find_first(dir, supported_names)
135
+ paths = supported_names.
136
+ map { |name| clean_join(dir, name) }.
137
+ each do |path|
138
+ return cached_files[path] || next
139
+ end
140
+ fetch_first_if_present(paths)
117
141
  end
118
142
 
119
- def supported_file(supported_file_names)
120
- supported_file_names.each do |supported_file_name|
121
- file = fetch_file_if_present(supported_file_name)
122
- return file if file
123
- end
143
+ def cached_files
144
+ @cached_files ||= {}
145
+ end
124
146
 
147
+ def fetch_first_if_present(paths)
148
+ paths.each do |path|
149
+ file = fetch_file_if_present(path) || next
150
+ cached_files[path] = file
151
+ return file
152
+ end
125
153
  nil
126
154
  end
127
155
  end
@@ -9,71 +9,58 @@ module Dependabot
9
9
  # rubocop:disable Layout/LineLength
10
10
  SUPPORTED_BUILD_FILE_NAMES = %w(build.gradle build.gradle.kts).freeze
11
11
 
12
- QUOTED_VALUE_REGEX =
13
- /\s*['"][^\s]+['"]\s*/.freeze
12
+ QUOTED_VALUE_REGEX = /\s*['"][^\s]+['"]\s*/
14
13
 
15
14
  # project.findProperty('property') ?:
16
- FIND_PROPERTY_REGEX =
17
- /\s*project\.findProperty\(#{QUOTED_VALUE_REGEX}\)\s*\?:/.freeze
15
+ FIND_PROPERTY_REGEX = /\s*project\.findProperty\(#{QUOTED_VALUE_REGEX}\)\s*\?:/
18
16
 
19
17
  # project.hasProperty('property') ? project.getProperty('property') :
20
18
  GROOVY_HAS_PROPERTY_REGEX =
21
- /\s*project\.hasProperty\(#{QUOTED_VALUE_REGEX}\)\s*\?\s*project\.getProperty\(#{QUOTED_VALUE_REGEX}\)\s*:/.freeze
19
+ /\s*project\.hasProperty\(#{QUOTED_VALUE_REGEX}\)\s*\?\s*project\.getProperty\(#{QUOTED_VALUE_REGEX}\)\s*:/
22
20
 
23
21
  # if(project.hasProperty("property")) project.getProperty("property") else
24
22
  KOTLIN_HAS_PROPERTY_REGEX =
25
- /\s*if\s*\(project\.hasProperty\(#{QUOTED_VALUE_REGEX}\)\)\s+project\.getProperty\(#{QUOTED_VALUE_REGEX}\)\s+else\s+/.freeze
23
+ /\s*if\s*\(project\.hasProperty\(#{QUOTED_VALUE_REGEX}\)\)\s+project\.getProperty\(#{QUOTED_VALUE_REGEX}\)\s+else\s+/
26
24
 
27
- GROOVY_PROPERTY_DECLARATION_AS_DEFAULTS_REGEX =
28
- /(?:#{FIND_PROPERTY_REGEX}|#{GROOVY_HAS_PROPERTY_REGEX})?/.freeze
25
+ GROOVY_PROPERTY_DECLARATION_AS_DEFAULTS_REGEX = /(?:#{FIND_PROPERTY_REGEX}|#{GROOVY_HAS_PROPERTY_REGEX})?/
29
26
 
30
- KOTLIN_PROPERTY_DECLARATION_AS_DEFAULTS_REGEX =
31
- /(?:#{FIND_PROPERTY_REGEX}|#{KOTLIN_HAS_PROPERTY_REGEX})?/.freeze
27
+ KOTLIN_PROPERTY_DECLARATION_AS_DEFAULTS_REGEX = /(?:#{FIND_PROPERTY_REGEX}|#{KOTLIN_HAS_PROPERTY_REGEX})?/
32
28
 
33
29
  PROPERTY_DECLARATION_AS_DEFAULTS_REGEX =
34
- /(#{GROOVY_PROPERTY_DECLARATION_AS_DEFAULTS_REGEX}|#{KOTLIN_PROPERTY_DECLARATION_AS_DEFAULTS_REGEX})?/.freeze
30
+ /(#{GROOVY_PROPERTY_DECLARATION_AS_DEFAULTS_REGEX}|#{KOTLIN_PROPERTY_DECLARATION_AS_DEFAULTS_REGEX})?/
35
31
 
36
- VALUE_REGEX =
37
- /#{PROPERTY_DECLARATION_AS_DEFAULTS_REGEX}\s*['"](?<value>[^\s]+)['"]/.freeze
32
+ VALUE_REGEX = /#{PROPERTY_DECLARATION_AS_DEFAULTS_REGEX}\s*['"](?<value>[^\s]+)['"]/
38
33
 
39
- GROOVY_SINGLE_PROPERTY_DECLARATION_REGEX =
40
- /(?:^|\s+|ext.)(?<name>[^\s=]+)\s*=#{VALUE_REGEX}/.freeze
34
+ GROOVY_SINGLE_PROPERTY_DECLARATION_REGEX = /(?:^|\s+|ext.)(?<name>[^\s=]+)\s*=#{VALUE_REGEX}/
41
35
 
42
- KOTLIN_SINGLE_PROPERTY_INDEX_DECLARATION_REGEX =
43
- /\s*extra\[['"](?<name>[^\s=]+)['"]\]\s*=#{VALUE_REGEX}/.freeze
36
+ KOTLIN_SINGLE_PROPERTY_INDEX_DECLARATION_REGEX = /\s*extra\[['"](?<name>[^\s=]+)['"]\]\s*=#{VALUE_REGEX}/
44
37
 
45
- KOTLIN_SINGLE_PROPERTY_SET_REGEX =
46
- /\s*set\(['"](?<name>[^\s=]+)['"]\s*,#{VALUE_REGEX}\)/.freeze
38
+ KOTLIN_SINGLE_PROPERTY_SET_REGEX = /\s*set\(['"](?<name>[^\s=]+)['"]\s*,#{VALUE_REGEX}\)/
47
39
 
48
- KOTLIN_SINGLE_PROPERTY_SET_DECLARATION_REGEX =
49
- /\s*extra\.#{KOTLIN_SINGLE_PROPERTY_SET_REGEX}/.freeze
40
+ KOTLIN_SINGLE_PROPERTY_SET_DECLARATION_REGEX = /\s*extra\.#{KOTLIN_SINGLE_PROPERTY_SET_REGEX}/
50
41
 
51
42
  KOTLIN_SINGLE_PROPERTY_DECLARATION_REGEX =
52
- /(#{KOTLIN_SINGLE_PROPERTY_INDEX_DECLARATION_REGEX}|#{KOTLIN_SINGLE_PROPERTY_SET_DECLARATION_REGEX})/.freeze
43
+ /(#{KOTLIN_SINGLE_PROPERTY_INDEX_DECLARATION_REGEX}|#{KOTLIN_SINGLE_PROPERTY_SET_DECLARATION_REGEX})/
53
44
 
54
45
  SINGLE_PROPERTY_DECLARATION_REGEX =
55
- /(#{KOTLIN_SINGLE_PROPERTY_DECLARATION_REGEX}|#{GROOVY_SINGLE_PROPERTY_DECLARATION_REGEX})/.freeze
46
+ /(#{KOTLIN_SINGLE_PROPERTY_DECLARATION_REGEX}|#{GROOVY_SINGLE_PROPERTY_DECLARATION_REGEX})/
56
47
 
57
- GROOVY_MULTI_PROPERTY_DECLARATION_REGEX =
58
- /(?:^|\s+|ext.)(?<namespace>[^\s=]+)\s*=\s*\[(?<values>[^\]]+)\]/m.freeze
48
+ GROOVY_MULTI_PROPERTY_DECLARATION_REGEX = /(?:^|\s+|ext.)(?<namespace>[^\s=]+)\s*=\s*\[(?<values>[^\]]+)\]/m
59
49
 
60
- KOTLIN_BLOCK_PROPERTY_DECLARATION_REGEX =
61
- /\s*(?<namespace>[^\s=]+)\.apply\s*{(?<values>[^\]]+)}/m.freeze
50
+ KOTLIN_BLOCK_PROPERTY_DECLARATION_REGEX = /\s*(?<namespace>[^\s=]+)\.apply\s*{(?<values>[^\]]+)}/m
62
51
 
63
52
  KOTLIN_MULTI_PROPERTY_DECLARATION_REGEX =
64
- /\s*extra\[['"](?<namespace>[^\s=]+)['"]\]\s*=\s*mapOf\((?<values>[^\]]+)\)/m.freeze
53
+ /\s*extra\[['"](?<namespace>[^\s=]+)['"]\]\s*=\s*mapOf\((?<values>[^\]]+)\)/m
65
54
 
66
55
  MULTI_PROPERTY_DECLARATION_REGEX =
67
- /(#{KOTLIN_MULTI_PROPERTY_DECLARATION_REGEX}|#{GROOVY_MULTI_PROPERTY_DECLARATION_REGEX})/.freeze
56
+ /(#{KOTLIN_MULTI_PROPERTY_DECLARATION_REGEX}|#{GROOVY_MULTI_PROPERTY_DECLARATION_REGEX})/
68
57
 
69
- KOTLIN_MAP_NAMESPACED_DECLARATION_REGEX =
70
- /(?:^|\s+)['"](?<name>[^\s:]+)['"]\s*to#{VALUE_REGEX}\s*/.freeze
58
+ KOTLIN_MAP_NAMESPACED_DECLARATION_REGEX = /(?:^|\s+)['"](?<name>[^\s:]+)['"]\s*to#{VALUE_REGEX}\s*/
71
59
 
72
- REGULAR_NAMESPACED_DECLARATION_REGEX =
73
- /(?:^|\s+)(?<name>[^\s:]+)\s*[:=]#{VALUE_REGEX}\s*/.freeze
60
+ REGULAR_NAMESPACED_DECLARATION_REGEX = /(?:^|\s+)(?<name>[^\s:]+)\s*[:=]#{VALUE_REGEX}\s*/
74
61
 
75
62
  NAMESPACED_DECLARATION_REGEX =
76
- /(#{REGULAR_NAMESPACED_DECLARATION_REGEX}|#{KOTLIN_MAP_NAMESPACED_DECLARATION_REGEX})/.freeze
63
+ /(#{REGULAR_NAMESPACED_DECLARATION_REGEX}|#{KOTLIN_MAP_NAMESPACED_DECLARATION_REGEX})/
77
64
  # rubocop:enable Layout/LineLength
78
65
 
79
66
  def initialize(dependency_files:)
@@ -15,16 +15,13 @@ module Dependabot
15
15
  GOOGLE_MAVEN_REPO = "https://maven.google.com"
16
16
  GRADLE_PLUGINS_REPO = "https://plugins.gradle.org/m2"
17
17
 
18
- REPOSITORIES_BLOCK_START = /(?:^|\s)repositories\s*\{/.freeze
18
+ REPOSITORIES_BLOCK_START = /(?:^|\s)repositories\s*\{/
19
19
 
20
- GROOVY_MAVEN_REPO_REGEX =
21
- /maven\s*\{[^\}]*\surl[\s\(]=?[^'"]*['"](?<url>[^'"]+)['"]/.freeze
20
+ GROOVY_MAVEN_REPO_REGEX = /maven\s*\{[^\}]*\surl[\s\(]=?[^'"]*['"](?<url>[^'"]+)['"]/
22
21
 
23
- KOTLIN_MAVEN_REPO_REGEX =
24
- /maven\((url\s?\=\s?)?["](?<url>[^"]+)["]\)/.freeze
22
+ KOTLIN_MAVEN_REPO_REGEX = /maven\((url\s?\=\s?)?["](?<url>[^"]+)["]\)/
25
23
 
26
- MAVEN_REPO_REGEX =
27
- /(#{KOTLIN_MAVEN_REPO_REGEX}|#{GROOVY_MAVEN_REPO_REGEX})/.freeze
24
+ MAVEN_REPO_REGEX = /(#{KOTLIN_MAVEN_REPO_REGEX}|#{GROOVY_MAVEN_REPO_REGEX})/
28
25
 
29
26
  def initialize(dependency_files:, target_dependency_file:)
30
27
  @dependency_files = dependency_files
@@ -25,18 +25,16 @@ module Dependabot
25
25
  (?:\$\{property\((?<property_name>[^:\s]*?)\)\})|
26
26
  (?:\$\{(?<property_name>[^:\s]*?)\})|
27
27
  (?:\$(?<property_name>[^:\s"']*))
28
- /x.freeze
29
-
30
- PART = %r{[^\s,@'":/\\]+}.freeze
31
- VSN_PART = %r{[^\s,'":/\\]+}.freeze
32
- DEPENDENCY_DECLARATION_REGEX =
33
- /(?:\(|\s)\s*['"](?<declaration>#{PART}:#{PART}:#{VSN_PART})['"]/.
34
- freeze
35
- DEPENDENCY_SET_DECLARATION_REGEX =
36
- /(?:^|\s)dependencySet\((?<arguments>[^\)]+)\)\s*\{/.freeze
37
- DEPENDENCY_SET_ENTRY_REGEX = /entry\s+['"](?<name>#{PART})['"]/.freeze
38
- PLUGIN_BLOCK_DECLARATION_REGEX = /(?:^|\s)plugins\s*\{/.freeze
39
- PLUGIN_ID_REGEX = /['"](?<id>#{PART})['"]/.freeze
28
+ /x
29
+
30
+ PART = %r{[^\s,@'":/\\]+}
31
+ VSN_PART = %r{[^\s,'":/\\]+}
32
+ DEPENDENCY_DECLARATION_REGEX = /(?:\(|\s)\s*['"](?<declaration>#{PART}:#{PART}:#{VSN_PART})['"]/
33
+
34
+ DEPENDENCY_SET_DECLARATION_REGEX = /(?:^|\s)dependencySet\((?<arguments>[^\)]+)\)\s*\{/
35
+ DEPENDENCY_SET_ENTRY_REGEX = /entry\s+['"](?<name>#{PART})['"]/
36
+ PLUGIN_BLOCK_DECLARATION_REGEX = /(?:^|\s)plugins\s*\{/
37
+ PLUGIN_ID_REGEX = /['"](?<id>#{PART})['"]/
40
38
 
41
39
  def parse
42
40
  dependency_set = DependencySet.new
@@ -59,8 +57,7 @@ module Dependabot
59
57
 
60
58
  def self.find_includes(buildfile, dependency_files)
61
59
  FileParser.find_include_names(buildfile).
62
- map { |f| dependency_files.find { |bf| bf.name == f } }.
63
- compact
60
+ filter_map { |f| dependency_files.find { |bf| bf.name == f } }
64
61
  end
65
62
 
66
63
  private
@@ -161,11 +158,10 @@ module Dependabot
161
158
 
162
159
  plugin_blocks.each do |blk|
163
160
  blk.lines.each do |line|
164
- name_regex = /(id|kotlin)(\s+#{PLUGIN_ID_REGEX}|\(#{PLUGIN_ID_REGEX}\))/
161
+ name_regex = /(id|kotlin)(\s+#{PLUGIN_ID_REGEX}|\(#{PLUGIN_ID_REGEX}\))/o
165
162
  name = line.match(name_regex)&.named_captures&.fetch("id")
166
- version_regex = /version\s+['"](?<version>#{VSN_PART})['"]/
167
- version = line.match(version_regex)&.named_captures&.
168
- fetch("version")
163
+ version_regex = /version\s+['"]?(?<version>#{VSN_PART})['"]?/o
164
+ version = format_plugin_version(line.match(version_regex)&.named_captures&.fetch("version"))
169
165
  next unless name && version
170
166
 
171
167
  details = { name: name, group: "plugins", extra_groups: extra_groups(line), version: version }
@@ -177,8 +173,12 @@ module Dependabot
177
173
  dependency_set
178
174
  end
179
175
 
176
+ def format_plugin_version(version)
177
+ version&.match?(/^\w+$/) ? "$#{version}" : version
178
+ end
179
+
180
180
  def extra_groups(line)
181
- line.match(/kotlin(\s+#{PLUGIN_ID_REGEX}|\(#{PLUGIN_ID_REGEX}\))/) ? ["kotlin"] : []
181
+ line.match?(/kotlin(\s+#{PLUGIN_ID_REGEX}|\(#{PLUGIN_ID_REGEX}\))/o) ? ["kotlin"] : []
182
182
  end
183
183
 
184
184
  def argument_from_string(string, arg_name)
@@ -11,8 +11,8 @@ require "dependabot/registry_client"
11
11
  module Dependabot
12
12
  module Gradle
13
13
  class MetadataFinder < Dependabot::MetadataFinders::Base
14
- DOT_SEPARATOR_REGEX = %r{\.(?!\d+([.\/_\-]|$)+)}.freeze
15
- PROPERTY_REGEX = /\$\{(?<property>.*?)\}/.freeze
14
+ DOT_SEPARATOR_REGEX = %r{\.(?!\d+([.\/_\-]|$)+)}
15
+ PROPERTY_REGEX = /\$\{(?<property>.*?)\}/
16
16
  KOTLIN_PLUGIN_REPO_PREFIX = "org.jetbrains.kotlin"
17
17
 
18
18
  private
@@ -8,9 +8,8 @@ module Dependabot
8
8
  module Gradle
9
9
  class Requirement < Gem::Requirement
10
10
  quoted = OPS.keys.map { |k| Regexp.quote k }.join("|")
11
- PATTERN_RAW =
12
- "\\s*(#{quoted})?\\s*(#{Gradle::Version::VERSION_PATTERN})\\s*"
13
- PATTERN = /\A#{PATTERN_RAW}\z/.freeze
11
+ PATTERN_RAW = "\\s*(#{quoted})?\\s*(#{Gradle::Version::VERSION_PATTERN})\\s*"
12
+ PATTERN = /\A#{PATTERN_RAW}\z/
14
13
 
15
14
  def self.parse(obj)
16
15
  return ["=", Gradle::Version.new(obj.to_s)] if obj.is_a?(Gem::Version)
@@ -137,8 +137,8 @@ module Dependabot
137
137
  url = Gradle::FileParser::RepositoriesFinder::GOOGLE_MAVEN_REPO
138
138
  group_id, artifact_id = group_and_artifact_ids
139
139
 
140
- dependency_metadata_url = "#{Gradle::FileParser::RepositoriesFinder::GOOGLE_MAVEN_REPO}/"\
141
- "#{group_id.tr('.', '/')}/"\
140
+ dependency_metadata_url = "#{Gradle::FileParser::RepositoriesFinder::GOOGLE_MAVEN_REPO}/" \
141
+ "#{group_id.tr('.', '/')}/" \
142
142
  "group-index.xml"
143
143
 
144
144
  @google_version_details ||=
@@ -185,7 +185,7 @@ module Dependabot
185
185
  end
186
186
 
187
187
  def check_response(response, repository_url)
188
- return unless [401, 403].include?(response.status)
188
+ return unless response.status == 401 || response.status == 403
189
189
  return if @forbidden_urls.include?(repository_url)
190
190
  return if central_repo_urls.include?(repository_url)
191
191
 
@@ -277,10 +277,10 @@ module Dependabot
277
277
  group_id, artifact_id = group_and_artifact_ids
278
278
  group_id = "#{KOTLIN_PLUGIN_REPO_PREFIX}.#{group_id}" if kotlin_plugin?
279
279
 
280
- "#{repository_url}/"\
281
- "#{group_id.tr('.', '/')}/"\
282
- "#{artifact_id}/"\
283
- "maven-metadata.xml"
280
+ "#{repository_url}/" \
281
+ "#{group_id.tr('.', '/')}/" \
282
+ "#{artifact_id}/" \
283
+ "maven-metadata.xml"
284
284
  end
285
285
 
286
286
  def group_and_artifact_ids
@@ -27,10 +27,10 @@ module Dependabot
27
27
  "sp" => 7
28
28
  }.freeze
29
29
  VERSION_PATTERN =
30
- "[0-9a-zA-Z]+"\
31
- '(?>\.[0-9a-zA-Z]*)*'\
30
+ "[0-9a-zA-Z]+" \
31
+ '(?>\.[0-9a-zA-Z]*)*' \
32
32
  '([_\-\+][0-9A-Za-z_-]*(\.[0-9A-Za-z_-]*)*)?'
33
- ANCHORED_VERSION_PATTERN = /\A\s*(#{VERSION_PATTERN})?\s*\z/.freeze
33
+ ANCHORED_VERSION_PATTERN = /\A\s*(#{VERSION_PATTERN})?\s*\z/
34
34
 
35
35
  def self.correct?(version)
36
36
  return false if version.nil?
@@ -117,11 +117,11 @@ module Dependabot
117
117
  end
118
118
 
119
119
  def trim_version(version)
120
- version.split("-").map do |v|
120
+ version.split("-").filter_map do |v|
121
121
  parts = v.split(".")
122
122
  parts = parts[0..-2] while NULL_VALUES.include?(parts&.last)
123
123
  parts&.join(".")
124
- end.compact.reject(&:empty?).join("-")
124
+ end.reject(&:empty?).join("-")
125
125
  end
126
126
 
127
127
  def convert_dates(version, other_version)
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.211.0
4
+ version: 0.213.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dependabot
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-08-23 00:00:00.000000000 Z
11
+ date: 2022-10-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: dependabot-common
@@ -16,56 +16,28 @@ dependencies:
16
16
  requirements:
17
17
  - - '='
18
18
  - !ruby/object:Gem::Version
19
- version: 0.211.0
19
+ version: 0.213.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.211.0
26
+ version: 0.213.0
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.211.0
33
+ version: 0.213.0
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.211.0
41
- - !ruby/object:Gem::Dependency
42
- name: debase
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - '='
46
- - !ruby/object:Gem::Version
47
- version: 0.2.3
48
- type: :development
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - '='
53
- - !ruby/object:Gem::Version
54
- version: 0.2.3
55
- - !ruby/object:Gem::Dependency
56
- name: debase-ruby_core_source
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - '='
60
- - !ruby/object:Gem::Version
61
- version: 0.10.16
62
- type: :development
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - '='
67
- - !ruby/object:Gem::Version
68
- version: 0.10.16
40
+ version: 0.213.0
69
41
  - !ruby/object:Gem::Dependency
70
42
  name: debug
71
43
  requirement: !ruby/object:Gem::Requirement
@@ -100,14 +72,14 @@ dependencies:
100
72
  requirements:
101
73
  - - "~>"
102
74
  - !ruby/object:Gem::Version
103
- version: 3.11.1
75
+ version: 3.13.0
104
76
  type: :development
105
77
  prerelease: false
106
78
  version_requirements: !ruby/object:Gem::Requirement
107
79
  requirements:
108
80
  - - "~>"
109
81
  - !ruby/object:Gem::Version
110
- version: 3.11.1
82
+ version: 3.13.0
111
83
  - !ruby/object:Gem::Dependency
112
84
  name: rake
113
85
  requirement: !ruby/object:Gem::Requirement
@@ -156,28 +128,28 @@ dependencies:
156
128
  requirements:
157
129
  - - "~>"
158
130
  - !ruby/object:Gem::Version
159
- version: 1.35.1
131
+ version: 1.37.1
160
132
  type: :development
161
133
  prerelease: false
162
134
  version_requirements: !ruby/object:Gem::Requirement
163
135
  requirements:
164
136
  - - "~>"
165
137
  - !ruby/object:Gem::Version
166
- version: 1.35.1
138
+ version: 1.37.1
167
139
  - !ruby/object:Gem::Dependency
168
- name: ruby-debug-ide
140
+ name: rubocop-performance
169
141
  requirement: !ruby/object:Gem::Requirement
170
142
  requirements:
171
143
  - - "~>"
172
144
  - !ruby/object:Gem::Version
173
- version: 0.7.3
145
+ version: 1.15.0
174
146
  type: :development
175
147
  prerelease: false
176
148
  version_requirements: !ruby/object:Gem::Requirement
177
149
  requirements:
178
150
  - - "~>"
179
151
  - !ruby/object:Gem::Version
180
- version: 0.7.3
152
+ version: 1.15.0
181
153
  - !ruby/object:Gem::Dependency
182
154
  name: simplecov
183
155
  requirement: !ruby/object:Gem::Requirement
@@ -283,14 +255,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
283
255
  requirements:
284
256
  - - ">="
285
257
  - !ruby/object:Gem::Version
286
- version: 2.7.0
258
+ version: 3.1.0
287
259
  required_rubygems_version: !ruby/object:Gem::Requirement
288
260
  requirements:
289
261
  - - ">="
290
262
  - !ruby/object:Gem::Version
291
- version: 2.7.0
263
+ version: 3.1.0
292
264
  requirements: []
293
- rubygems_version: 3.1.6
265
+ rubygems_version: 3.3.7
294
266
  signing_key:
295
267
  specification_version: 4
296
268
  summary: Gradle support for dependabot