dependabot-julia 0.387.0 → 0.388.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: 76dfbce20089045f1450b8e8c2c48a7b3c9b57fb48036014d0df8408a22c2603
4
- data.tar.gz: f3594883c239208218847751d87eecbd3f04f9af019e4f9044d8a7da57ee6ac5
3
+ metadata.gz: 2628b507fdc47bc850a7e6dc73e4530808e4f52639ce522da5360679f594ce70
4
+ data.tar.gz: 34546cecf9663484a9b3b0d01644587933eda20e6d04f5c6d19e24e37671ecd0
5
5
  SHA512:
6
- metadata.gz: 27f432eee3b36aa258ae409c4afe26aaa4bc8f41589025d1f4147ba4737d4fe0543225c8765178797e5dbc6c66728e93dec966fd8849223b3731b42e29034dce
7
- data.tar.gz: 6b414d534a79f3d9098878652fd5554091cd3faccdb36cab1236ce6972f74e3a24cc7ac68986b46276829b178961132d16971eb2285b47cecc658a23a572246b
6
+ metadata.gz: a6b3aaaa79728c4bafdd42c8a18aa0955325de301b7ad54811d3da1e6365e933f01002074d97bf6e63174e56ad48f9f1a68d9d9bd2104f9eb72722cd14a00ec8
7
+ data.tar.gz: 402220f3b7ef021f4b8d34df16814853e2194211fdeec4bf6e0d1cf54c399d2f15a86ec9f50f985fc6745936f7c2cd107661b24d4dcdef4fff0cfdb0ecbd62ab
@@ -105,9 +105,36 @@ module Dependabot
105
105
  def project_file_dependencies
106
106
  dependencies_map = T.let({}, T::Hash[String, Dependabot::Dependency])
107
107
 
108
- # Parse all project files in the workspace
109
- all_project_files.each do |proj_file|
110
- parse_single_project_file(proj_file, dependencies_map)
108
+ parsed_projects = all_project_files.filter_map do |proj_file|
109
+ result = parse_project_file(proj_file)
110
+ [proj_file, result] if result
111
+ end
112
+
113
+ # Packages that are themselves workspace projects (the root package or
114
+ # a sibling member) resolve by path within the workspace, never from a
115
+ # registry, so they must not be treated as updatable dependencies.
116
+ workspace_package_uuids = parsed_projects.filter_map do |_, result|
117
+ T.cast(result["uuid"], T.nilable(String))
118
+ end
119
+
120
+ parsed_projects.each do |proj_file, result|
121
+ parsed_deps = T.cast(result["dependencies"] || [], T::Array[T.untyped])
122
+ merge_dependencies_from_list(
123
+ parsed_deps,
124
+ ["deps"],
125
+ proj_file.name,
126
+ dependencies_map,
127
+ workspace_package_uuids
128
+ )
129
+
130
+ parsed_weak_deps = T.cast(result["weak_dependencies"] || [], T::Array[T.untyped])
131
+ merge_dependencies_from_list(
132
+ parsed_weak_deps,
133
+ ["weakdeps"],
134
+ proj_file.name,
135
+ dependencies_map,
136
+ workspace_package_uuids
137
+ )
111
138
  end
112
139
 
113
140
  apply_manifest_versions(dependencies_map)
@@ -181,8 +208,8 @@ module Dependabot
181
208
  end
182
209
  end
183
210
 
184
- sig { params(proj_file: Dependabot::DependencyFile, dependencies_map: T::Hash[String, Dependabot::Dependency]).void }
185
- def parse_single_project_file(proj_file, dependencies_map)
211
+ sig { params(proj_file: Dependabot::DependencyFile).returns(T.nilable(T::Hash[String, T.untyped])) }
212
+ def parse_project_file(proj_file)
186
213
  temp_dir = Dir.mktmpdir("julia_project")
187
214
  # File names like "../Project.toml" (a workspace root fetched from a
188
215
  # member directory) must not escape the temp dir; fall back to the
@@ -197,15 +224,9 @@ module Dependabot
197
224
  begin
198
225
  result = registry_client.parse_project(project_path: project_path)
199
226
 
200
- return if result["error"]
227
+ return nil if result["error"]
201
228
 
202
- # Process dependencies
203
- parsed_deps = T.cast(result["dependencies"] || [], T::Array[T.untyped])
204
- merge_dependencies_from_list(parsed_deps, ["deps"], proj_file.name, dependencies_map)
205
-
206
- # Process weak dependencies
207
- parsed_weak_deps = T.cast(result["weak_dependencies"] || [], T::Array[T.untyped])
208
- merge_dependencies_from_list(parsed_weak_deps, ["weakdeps"], proj_file.name, dependencies_map)
229
+ result
209
230
  ensure
210
231
  FileUtils.rm_rf(temp_dir)
211
232
  end
@@ -216,10 +237,11 @@ module Dependabot
216
237
  dep_list: T::Array[T.untyped],
217
238
  groups: T::Array[String],
218
239
  file_name: String,
219
- dependencies_map: T::Hash[String, Dependabot::Dependency]
240
+ dependencies_map: T::Hash[String, Dependabot::Dependency],
241
+ workspace_package_uuids: T::Array[String]
220
242
  ).void
221
243
  end
222
- def merge_dependencies_from_list(dep_list, groups, file_name, dependencies_map)
244
+ def merge_dependencies_from_list(dep_list, groups, file_name, dependencies_map, workspace_package_uuids)
223
245
  dep_list.each do |dep_info|
224
246
  dep_hash = T.cast(dep_info, T::Hash[String, T.untyped])
225
247
  name = T.cast(dep_hash["name"], String)
@@ -228,6 +250,8 @@ module Dependabot
228
250
  uuid = T.cast(dep_hash["uuid"], T.nilable(String))
229
251
  requirement_string = T.cast(dep_hash["requirement"], T.nilable(String))
230
252
 
253
+ next if skip_dependency?(uuid, requirement_string, file_name, workspace_package_uuids)
254
+
231
255
  new_requirement = {
232
256
  requirement: requirement_string,
233
257
  file: file_name,
@@ -287,6 +311,32 @@ module Dependabot
287
311
  dependency_files.select { |f| f.name.match?(/Project\.toml$/i) }
288
312
  end
289
313
 
314
+ sig do
315
+ params(
316
+ uuid: T.nilable(String),
317
+ requirement_string: T.nilable(String),
318
+ file_name: String,
319
+ workspace_package_uuids: T::Array[String]
320
+ ).returns(T::Boolean)
321
+ end
322
+ def skip_dependency?(uuid, requirement_string, file_name, workspace_package_uuids)
323
+ return true if uuid && workspace_package_uuids.include?(uuid)
324
+
325
+ # A dep with no compat entry in a workspace member file (test/,
326
+ # docs/, ...) must not get one synthesized: Julia convention
327
+ # (CompatHelper) only adds compat bounds to the package's own
328
+ # Project.toml. Existing member compat entries are still updated.
329
+ requirement_string.nil? && workspace_member_file?(file_name)
330
+ end
331
+
332
+ # Anything outside the target directory ("test/Project.toml", or
333
+ # "../Project.toml" when Dependabot targets a member directory) was
334
+ # discovered via workspace membership rather than requested directly.
335
+ sig { params(file_name: String).returns(T::Boolean) }
336
+ def workspace_member_file?(file_name)
337
+ file_name.include?("/")
338
+ end
339
+
290
340
  sig { returns(T.nilable(Dependabot::DependencyFile)) }
291
341
  def project_file
292
342
  @project_file ||= T.let(
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dependabot-julia
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.387.0
4
+ version: 0.388.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dependabot
@@ -15,14 +15,14 @@ dependencies:
15
15
  requirements:
16
16
  - - '='
17
17
  - !ruby/object:Gem::Version
18
- version: 0.387.0
18
+ version: 0.388.0
19
19
  type: :runtime
20
20
  prerelease: false
21
21
  version_requirements: !ruby/object:Gem::Requirement
22
22
  requirements:
23
23
  - - '='
24
24
  - !ruby/object:Gem::Version
25
- version: 0.387.0
25
+ version: 0.388.0
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: debug
28
28
  requirement: !ruby/object:Gem::Requirement
@@ -261,7 +261,7 @@ licenses:
261
261
  - MIT
262
262
  metadata:
263
263
  bug_tracker_uri: https://github.com/dependabot/dependabot-core/issues
264
- changelog_uri: https://github.com/dependabot/dependabot-core/releases/tag/v0.387.0
264
+ changelog_uri: https://github.com/dependabot/dependabot-core/releases/tag/v0.388.0
265
265
  rdoc_options: []
266
266
  require_paths:
267
267
  - lib