dependabot-nuget 0.288.0 → 0.290.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.
Files changed (117) hide show
  1. checksums.yaml +4 -4
  2. data/helpers/lib/NuGetUpdater/Directory.Packages.props +19 -17
  3. data/helpers/lib/NuGetUpdater/NuGetProjects/NuGet.Packaging/NuGet.Packaging.csproj +0 -1
  4. data/helpers/lib/NuGetUpdater/NuGetUpdater.Cli/Commands/AnalyzeCommand.cs +7 -3
  5. data/helpers/lib/NuGetUpdater/NuGetUpdater.Cli/Commands/RunCommand.cs +1 -1
  6. data/helpers/lib/NuGetUpdater/NuGetUpdater.Cli.Test/EntryPointTests.Analyze.cs +29 -2
  7. data/helpers/lib/NuGetUpdater/NuGetUpdater.Cli.Test/EntryPointTests.Discover.cs +25 -4
  8. data/helpers/lib/NuGetUpdater/NuGetUpdater.Cli.Test/EntryPointTests.Run.cs +0 -6
  9. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Analyze/AnalyzeWorker.cs +33 -16
  10. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Analyze/CompatabilityChecker.cs +25 -10
  11. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Analyze/NuGetContext.cs +0 -13
  12. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Analyze/RequirementArrayConverter.cs +39 -0
  13. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Analyze/VersionFinder.cs +1 -1
  14. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Clone/ShellGitCommandHandler.cs +1 -1
  15. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Discover/DiscoveryWorker.cs +60 -66
  16. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Discover/DotNetToolsJsonDiscovery.cs +2 -2
  17. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Discover/GlobalJsonDiscovery.cs +2 -2
  18. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Discover/PackagesConfigDiscovery.cs +11 -3
  19. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Discover/PackagesConfigDiscoveryResult.cs +1 -0
  20. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Discover/ProjectDiscoveryResult.cs +2 -4
  21. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Discover/SdkProjectDiscovery.cs +54 -11
  22. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Discover/WorkspaceDiscoveryResult.cs +0 -1
  23. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/ExperimentsManager.cs +1 -2
  24. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Files/JsonBuildFile.cs +1 -1
  25. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/FrameworkChecker/CompatabilityChecker.cs +2 -2
  26. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/ApiModel/Advisory.cs +13 -0
  27. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/ApiModel/AllowedUpdate.cs +18 -1
  28. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/ApiModel/CommitOptions.cs +8 -0
  29. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/ApiModel/Condition.cs +19 -0
  30. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/ApiModel/DependencyGroup.cs +8 -0
  31. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/ApiModel/GroupPullRequest.cs +9 -0
  32. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/ApiModel/Job.cs +13 -10
  33. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/ApiModel/PullRequest.cs +11 -0
  34. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/ApiModel/RequirementsUpdateStrategy.cs +15 -0
  35. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/RunWorker.cs +67 -58
  36. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/VersionConverter.cs +19 -0
  37. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Updater/BindingRedirectManager.cs +15 -44
  38. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Updater/DotNetToolsJsonUpdater.cs +4 -4
  39. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Updater/GlobalJsonUpdater.cs +5 -5
  40. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Updater/LockFileUpdater.cs +2 -10
  41. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Updater/PackageReferenceUpdater.cs +38 -33
  42. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Updater/PackagesConfigUpdater.cs +25 -23
  43. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Updater/UpdaterWorker.cs +16 -12
  44. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Utilities/ConsoleLogger.cs +1 -1
  45. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Utilities/DependencyConflictResolver.cs +19 -19
  46. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Utilities/ILogger.cs +11 -1
  47. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Utilities/JsonHelper.cs +2 -0
  48. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Utilities/MSBuildHelper.cs +18 -17
  49. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Utilities/NuGetHelper.cs +1 -17
  50. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Utilities/PathHelper.cs +17 -9
  51. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Utilities/ProjectHelper.cs +96 -0
  52. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Analyze/AnalyzeWorkerTestBase.cs +5 -2
  53. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Analyze/AnalyzeWorkerTests.cs +87 -5
  54. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Discover/DiscoveryWorkerTestBase.cs +2 -5
  55. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Discover/DiscoveryWorkerTests.DotNetToolsJson.cs +45 -1
  56. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Discover/DiscoveryWorkerTests.GlobalJson.cs +35 -1
  57. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Discover/DiscoveryWorkerTests.PackagesConfig.cs +16 -0
  58. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Discover/DiscoveryWorkerTests.Proj.cs +6 -0
  59. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Discover/DiscoveryWorkerTests.Project.cs +143 -36
  60. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Discover/DiscoveryWorkerTests.cs +184 -48
  61. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Discover/ExpectedDiscoveryResults.cs +5 -5
  62. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Discover/SdkProjectDiscoveryTests.cs +32 -10
  63. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Run/MiscellaneousTests.cs +85 -0
  64. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Run/RunWorkerTests.cs +402 -102
  65. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Run/SerializationTests.cs +342 -2
  66. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Run/UpdatedDependencyListTests.cs +60 -2
  67. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/TemporaryDirectory.cs +18 -7
  68. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/TestLogger.cs +1 -1
  69. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Update/BindingRedirectsTests.cs +1 -1
  70. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Update/PackagesConfigUpdaterTests.cs +24 -0
  71. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Update/UpdateWorkerTestBase.cs +4 -14
  72. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Update/UpdateWorkerTests.DotNetTools.cs +84 -0
  73. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Update/UpdateWorkerTests.GlobalJson.cs +66 -0
  74. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Update/UpdateWorkerTests.PackageReference.cs +95 -0
  75. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Update/UpdateWorkerTests.PackagesConfig.cs +1 -7
  76. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Utilities/AssertEx.cs +1 -1
  77. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Utilities/LinuxOnlyAttribute.cs +12 -0
  78. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Utilities/MSBuildHelperTests.cs +558 -711
  79. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Utilities/PathHelperTests.cs +47 -2
  80. data/lib/dependabot/nuget/analysis/analysis_json_reader.rb +4 -2
  81. data/lib/dependabot/nuget/analysis/dependency_analysis.rb +3 -3
  82. data/lib/dependabot/nuget/discovery/dependency_details.rb +10 -3
  83. data/lib/dependabot/nuget/discovery/dependency_file_discovery.rb +8 -12
  84. data/lib/dependabot/nuget/discovery/discovery_json_reader.rb +214 -29
  85. data/lib/dependabot/nuget/discovery/project_discovery.rb +41 -8
  86. data/lib/dependabot/nuget/discovery/workspace_discovery.rb +14 -19
  87. data/lib/dependabot/nuget/file_fetcher.rb +11 -393
  88. data/lib/dependabot/nuget/file_parser.rb +23 -61
  89. data/lib/dependabot/nuget/file_updater.rb +28 -23
  90. data/lib/dependabot/nuget/native_helpers.rb +14 -5
  91. data/lib/dependabot/nuget/update_checker/requirements_updater.rb +23 -27
  92. data/lib/dependabot/nuget/update_checker.rb +116 -190
  93. metadata +20 -32
  94. data/helpers/lib/NuGetUpdater/NuGetProjects/Directory.Packages.props +0 -29
  95. data/lib/dependabot/nuget/discovery/directory_packages_props_discovery.rb +0 -43
  96. data/lib/dependabot/nuget/file_fetcher/import_paths_finder.rb +0 -73
  97. data/lib/dependabot/nuget/file_fetcher/sln_project_paths_finder.rb +0 -60
  98. data/lib/dependabot/nuget/http_response_helpers.rb +0 -19
  99. data/lib/dependabot/nuget/native_discovery/native_dependency_details.rb +0 -102
  100. data/lib/dependabot/nuget/native_discovery/native_dependency_file_discovery.rb +0 -129
  101. data/lib/dependabot/nuget/native_discovery/native_discovery_json_reader.rb +0 -171
  102. data/lib/dependabot/nuget/native_discovery/native_evaluation_details.rb +0 -63
  103. data/lib/dependabot/nuget/native_discovery/native_project_discovery.rb +0 -82
  104. data/lib/dependabot/nuget/native_discovery/native_property_details.rb +0 -43
  105. data/lib/dependabot/nuget/native_discovery/native_workspace_discovery.rb +0 -68
  106. data/lib/dependabot/nuget/native_update_checker/native_requirements_updater.rb +0 -105
  107. data/lib/dependabot/nuget/native_update_checker/native_update_checker.rb +0 -201
  108. data/lib/dependabot/nuget/nuget_client.rb +0 -223
  109. data/lib/dependabot/nuget/update_checker/compatibility_checker.rb +0 -116
  110. data/lib/dependabot/nuget/update_checker/dependency_finder.rb +0 -297
  111. data/lib/dependabot/nuget/update_checker/nupkg_fetcher.rb +0 -221
  112. data/lib/dependabot/nuget/update_checker/nuspec_fetcher.rb +0 -110
  113. data/lib/dependabot/nuget/update_checker/property_updater.rb +0 -196
  114. data/lib/dependabot/nuget/update_checker/repository_finder.rb +0 -466
  115. data/lib/dependabot/nuget/update_checker/tfm_comparer.rb +0 -34
  116. data/lib/dependabot/nuget/update_checker/tfm_finder.rb +0 -30
  117. data/lib/dependabot/nuget/update_checker/version_finder.rb +0 -449
@@ -1,171 +0,0 @@
1
- # typed: strong
2
- # frozen_string_literal: true
3
-
4
- require "dependabot/dependency"
5
- require "dependabot/nuget/native_discovery/native_workspace_discovery"
6
- require "json"
7
- require "sorbet-runtime"
8
-
9
- module Dependabot
10
- module Nuget
11
- class NativeDiscoveryJsonReader
12
- extend T::Sig
13
-
14
- sig { returns(T::Hash[String, NativeDiscoveryJsonReader]) }
15
- def self.discovery_result_cache
16
- T.let(CacheManager.cache("discovery_json_cache"), T::Hash[String, NativeDiscoveryJsonReader])
17
- end
18
-
19
- sig { returns(T::Hash[String, String]) }
20
- def self.discovery_path_cache
21
- T.let(CacheManager.cache("discovery_path_cache"), T::Hash[String, String])
22
- end
23
-
24
- sig do
25
- params(
26
- dependency_files: T::Array[Dependabot::DependencyFile]
27
- ).returns(NativeDiscoveryJsonReader)
28
- end
29
- def self.get_discovery_from_dependency_files(dependency_files)
30
- key = create_cache_key(dependency_files)
31
- discovery_json = discovery_result_cache[key]
32
- raise "No discovery result for specified dependency files: #{key}" unless discovery_json
33
-
34
- discovery_json
35
- end
36
-
37
- sig do
38
- params(
39
- dependency_files: T::Array[Dependabot::DependencyFile],
40
- discovery: NativeDiscoveryJsonReader
41
- ).void
42
- end
43
- def self.set_discovery_from_dependency_files(dependency_files:, discovery:)
44
- key = create_cache_key(dependency_files)
45
- discovery_result_cache[key] = discovery
46
- end
47
-
48
- sig do
49
- params(
50
- dependency_files: T::Array[Dependabot::DependencyFile]
51
- ).returns(String)
52
- end
53
- def self.get_discovery_file_path_from_dependency_files(dependency_files)
54
- key = create_cache_key(dependency_files)
55
- discovery_path = discovery_path_cache[key]
56
- raise "No discovery path found for specified dependency files: #{key}" unless discovery_path
57
-
58
- discovery_path
59
- end
60
-
61
- sig do
62
- params(
63
- dependency_files: T::Array[Dependabot::DependencyFile]
64
- ).returns(String)
65
- end
66
- def self.create_discovery_file_path_from_dependency_files(dependency_files)
67
- discovery_key = create_cache_key(dependency_files)
68
- if discovery_path_cache[discovery_key]
69
- raise "Discovery file path already exists for the given dependency files: #{discovery_key}"
70
- end
71
-
72
- discovery_counter_cache = T.let(CacheManager.cache("discovery_counter_cache"), T::Hash[String, Integer])
73
- counter_key = "counter"
74
- current_counter = discovery_counter_cache[counter_key] || 0
75
- current_counter += 1
76
- discovery_counter_cache[counter_key] = current_counter
77
- incremeted_discovery_file_path = File.join(temp_directory, "discovery.#{current_counter}.json")
78
- discovery_path_cache[discovery_key] = incremeted_discovery_file_path
79
- incremeted_discovery_file_path
80
- end
81
-
82
- # this is a test-only method
83
- sig do
84
- params(
85
- dependency_files: T::Array[Dependabot::DependencyFile]
86
- ).void
87
- end
88
- def self.clear_discovery_file_path_from_cache(dependency_files)
89
- key = create_cache_key(dependency_files)
90
- discovery_file_path = discovery_path_cache[key]
91
- File.delete(discovery_file_path) if discovery_file_path && File.exist?(discovery_file_path)
92
- discovery_path_cache.delete(key)
93
- end
94
-
95
- sig do
96
- params(
97
- dependency_files: T::Array[Dependabot::DependencyFile]
98
- ).returns(String)
99
- end
100
- def self.create_cache_key(dependency_files)
101
- dependency_files.map { |d| d.to_h.except("content") }.to_s
102
- end
103
-
104
- sig { returns(String) }
105
- def self.temp_directory
106
- File.join(Dir.tmpdir, ".dependabot")
107
- end
108
-
109
- sig do
110
- params(
111
- discovery_json_path: String
112
- ).returns(T.nilable(DependencyFile))
113
- end
114
- def self.discovery_json_from_path(discovery_json_path)
115
- return unless File.exist?(discovery_json_path)
116
-
117
- DependencyFile.new(
118
- name: Pathname.new(discovery_json_path).cleanpath.to_path,
119
- directory: temp_directory,
120
- type: "file",
121
- content: File.read(discovery_json_path)
122
- )
123
- end
124
-
125
- sig { returns(T.nilable(NativeWorkspaceDiscovery)) }
126
- attr_reader :workspace_discovery
127
-
128
- sig { returns(Dependabot::FileParsers::Base::DependencySet) }
129
- attr_reader :dependency_set
130
-
131
- sig { params(discovery_json: DependencyFile).void }
132
- def initialize(discovery_json:)
133
- @discovery_json = discovery_json
134
- @workspace_discovery = T.let(read_workspace_discovery, T.nilable(Dependabot::Nuget::NativeWorkspaceDiscovery))
135
- @dependency_set = T.let(read_dependency_set, Dependabot::FileParsers::Base::DependencySet)
136
- end
137
-
138
- private
139
-
140
- sig { returns(DependencyFile) }
141
- attr_reader :discovery_json
142
-
143
- sig { returns(T.nilable(NativeWorkspaceDiscovery)) }
144
- def read_workspace_discovery
145
- return nil unless discovery_json.content
146
-
147
- parsed_json = T.let(JSON.parse(T.must(discovery_json.content)), T::Hash[String, T.untyped])
148
- NativeWorkspaceDiscovery.from_json(parsed_json)
149
- rescue JSON::ParserError
150
- raise Dependabot::DependencyFileNotParseable, discovery_json.path
151
- end
152
-
153
- sig { returns(Dependabot::FileParsers::Base::DependencySet) }
154
- def read_dependency_set
155
- dependency_set = Dependabot::FileParsers::Base::DependencySet.new
156
- return dependency_set unless workspace_discovery
157
-
158
- workspace_result = T.must(workspace_discovery)
159
- workspace_result.projects.each do |project|
160
- dependency_set += project.dependency_set
161
- end
162
- if workspace_result.dotnet_tools_json
163
- dependency_set += T.must(workspace_result.dotnet_tools_json).dependency_set
164
- end
165
- dependency_set += T.must(workspace_result.global_json).dependency_set if workspace_result.global_json
166
-
167
- dependency_set
168
- end
169
- end
170
- end
171
- end
@@ -1,63 +0,0 @@
1
- # typed: strong
2
- # frozen_string_literal: true
3
-
4
- require "sorbet-runtime"
5
-
6
- module Dependabot
7
- module Nuget
8
- class NativeEvaluationDetails
9
- extend T::Sig
10
-
11
- sig { params(json: T.nilable(T::Hash[String, T.untyped])).returns(T.nilable(NativeEvaluationDetails)) }
12
- def self.from_json(json)
13
- return nil if json.nil?
14
-
15
- result_type = T.let(json.fetch("ResultType"), String)
16
- original_value = T.let(json.fetch("OriginalValue"), String)
17
- evaluated_value = T.let(json.fetch("EvaluatedValue"), String)
18
- root_property_name = T.let(json.fetch("RootPropertyName", nil), T.nilable(String))
19
- error_message = T.let(json.fetch("ErrorMessage", nil), T.nilable(String))
20
-
21
- NativeEvaluationDetails.new(result_type: result_type,
22
- original_value: original_value,
23
- evaluated_value: evaluated_value,
24
- root_property_name: root_property_name,
25
- error_message: error_message)
26
- end
27
-
28
- sig do
29
- params(result_type: String,
30
- original_value: String,
31
- evaluated_value: String,
32
- root_property_name: T.nilable(String),
33
- error_message: T.nilable(String)).void
34
- end
35
- def initialize(result_type:,
36
- original_value:,
37
- evaluated_value:,
38
- root_property_name:,
39
- error_message:)
40
- @result_type = result_type
41
- @original_value = original_value
42
- @evaluated_value = evaluated_value
43
- @root_property_name = root_property_name
44
- @error_message = error_message
45
- end
46
-
47
- sig { returns(String) }
48
- attr_reader :result_type
49
-
50
- sig { returns(String) }
51
- attr_reader :original_value
52
-
53
- sig { returns(String) }
54
- attr_reader :evaluated_value
55
-
56
- sig { returns(T.nilable(String)) }
57
- attr_reader :root_property_name
58
-
59
- sig { returns(T.nilable(String)) }
60
- attr_reader :error_message
61
- end
62
- end
63
- end
@@ -1,82 +0,0 @@
1
- # typed: strong
2
- # frozen_string_literal: true
3
-
4
- require "dependabot/nuget/native_discovery/native_dependency_details"
5
- require "dependabot/nuget/native_discovery/native_property_details"
6
- require "sorbet-runtime"
7
-
8
- module Dependabot
9
- module Nuget
10
- class NativeProjectDiscovery < NativeDependencyFileDiscovery
11
- extend T::Sig
12
-
13
- sig do
14
- override.params(json: T.nilable(T::Hash[String, T.untyped]),
15
- directory: String).returns(T.nilable(NativeProjectDiscovery))
16
- end
17
- def self.from_json(json, directory)
18
- return nil if json.nil?
19
-
20
- file_path = File.join(directory, T.let(json.fetch("FilePath"), String))
21
- properties = T.let(json.fetch("Properties"), T::Array[T::Hash[String, T.untyped]]).map do |prop|
22
- NativePropertyDetails.from_json(prop)
23
- end
24
- target_frameworks = T.let(json.fetch("TargetFrameworks"), T::Array[String])
25
- referenced_project_paths = T.let(json.fetch("ReferencedProjectPaths"), T::Array[String])
26
- dependencies = T.let(json.fetch("Dependencies"), T::Array[T::Hash[String, T.untyped]]).filter_map do |dep|
27
- details = NativeDependencyDetails.from_json(dep)
28
- next unless details.version # can't do anything without a version
29
-
30
- version = T.must(details.version)
31
- next unless version.length.positive? # can't do anything with an empty version
32
-
33
- next if version.include? "," # can't do anything with a range
34
-
35
- next if version.include? "*" # can't do anything with a wildcard
36
-
37
- details
38
- end
39
-
40
- NativeProjectDiscovery.new(file_path: file_path,
41
- properties: properties,
42
- target_frameworks: target_frameworks,
43
- referenced_project_paths: referenced_project_paths,
44
- dependencies: dependencies)
45
- end
46
-
47
- sig do
48
- params(file_path: String,
49
- properties: T::Array[NativePropertyDetails],
50
- target_frameworks: T::Array[String],
51
- referenced_project_paths: T::Array[String],
52
- dependencies: T::Array[NativeDependencyDetails]).void
53
- end
54
- def initialize(file_path:, properties:, target_frameworks:, referenced_project_paths:, dependencies:)
55
- super(file_path: file_path, dependencies: dependencies)
56
- @properties = properties
57
- @target_frameworks = target_frameworks
58
- @referenced_project_paths = referenced_project_paths
59
- end
60
-
61
- sig { returns(T::Array[NativePropertyDetails]) }
62
- attr_reader :properties
63
-
64
- sig { returns(T::Array[String]) }
65
- attr_reader :target_frameworks
66
-
67
- sig { returns(T::Array[String]) }
68
- attr_reader :referenced_project_paths
69
-
70
- sig { override.returns(Dependabot::FileParsers::Base::DependencySet) }
71
- def dependency_set
72
- if target_frameworks.empty? && file_path.end_with?("proj")
73
- Dependabot.logger.warn("Excluding project file '#{file_path}' due to unresolvable target framework")
74
- dependency_set = Dependabot::FileParsers::Base::DependencySet.new
75
- return dependency_set
76
- end
77
-
78
- super
79
- end
80
- end
81
- end
82
- end
@@ -1,43 +0,0 @@
1
- # typed: strong
2
- # frozen_string_literal: true
3
-
4
- require "sorbet-runtime"
5
-
6
- module Dependabot
7
- module Nuget
8
- class NativePropertyDetails
9
- extend T::Sig
10
-
11
- sig { params(json: T::Hash[String, T.untyped]).returns(NativePropertyDetails) }
12
- def self.from_json(json)
13
- name = T.let(json.fetch("Name"), String)
14
- value = T.let(json.fetch("Value"), String)
15
- source_file_path = T.let(json.fetch("SourceFilePath"), String)
16
-
17
- NativePropertyDetails.new(name: name,
18
- value: value,
19
- source_file_path: source_file_path)
20
- end
21
-
22
- sig do
23
- params(name: String,
24
- value: String,
25
- source_file_path: String).void
26
- end
27
- def initialize(name:, value:, source_file_path:)
28
- @name = name
29
- @value = value
30
- @source_file_path = source_file_path
31
- end
32
-
33
- sig { returns(String) }
34
- attr_reader :name
35
-
36
- sig { returns(String) }
37
- attr_reader :value
38
-
39
- sig { returns(String) }
40
- attr_reader :source_file_path
41
- end
42
- end
43
- end
@@ -1,68 +0,0 @@
1
- # typed: strong
2
- # frozen_string_literal: true
3
-
4
- require "dependabot/nuget/native_discovery/native_dependency_file_discovery"
5
- require "dependabot/nuget/native_discovery/native_project_discovery"
6
- require "dependabot/nuget/native_helpers"
7
- require "sorbet-runtime"
8
-
9
- module Dependabot
10
- module Nuget
11
- class NativeWorkspaceDiscovery
12
- extend T::Sig
13
-
14
- sig { params(json: T::Hash[String, T.untyped]).returns(NativeWorkspaceDiscovery) }
15
- def self.from_json(json)
16
- Dependabot::Nuget::NativeHelpers.ensure_no_errors(json)
17
-
18
- path = T.let(json.fetch("Path"), String)
19
- path = "/" + path unless path.start_with?("/")
20
- projects = T.let(json.fetch("Projects"), T::Array[T::Hash[String, T.untyped]]).filter_map do |project|
21
- NativeProjectDiscovery.from_json(project, path)
22
- end
23
- imported_files = T.let(json.fetch("ImportedFiles"), T::Array[String])
24
- global_json = NativeDependencyFileDiscovery
25
- .from_json(T.let(json.fetch("GlobalJson"), T.nilable(T::Hash[String, T.untyped])), path)
26
- dotnet_tools_json = NativeDependencyFileDiscovery
27
- .from_json(T.let(json.fetch("DotNetToolsJson"),
28
- T.nilable(T::Hash[String, T.untyped])), path)
29
-
30
- NativeWorkspaceDiscovery.new(path: path,
31
- projects: projects,
32
- imported_files: imported_files,
33
- global_json: global_json,
34
- dotnet_tools_json: dotnet_tools_json)
35
- end
36
-
37
- sig do
38
- params(path: String,
39
- projects: T::Array[NativeProjectDiscovery],
40
- imported_files: T::Array[String],
41
- global_json: T.nilable(NativeDependencyFileDiscovery),
42
- dotnet_tools_json: T.nilable(NativeDependencyFileDiscovery)).void
43
- end
44
- def initialize(path:, projects:, imported_files:, global_json:, dotnet_tools_json:)
45
- @path = path
46
- @projects = projects
47
- @imported_files = imported_files
48
- @global_json = global_json
49
- @dotnet_tools_json = dotnet_tools_json
50
- end
51
-
52
- sig { returns(String) }
53
- attr_reader :path
54
-
55
- sig { returns(T::Array[NativeProjectDiscovery]) }
56
- attr_reader :projects
57
-
58
- sig { returns(T::Array[String]) }
59
- attr_reader :imported_files
60
-
61
- sig { returns(T.nilable(NativeDependencyFileDiscovery)) }
62
- attr_reader :global_json
63
-
64
- sig { returns(T.nilable(NativeDependencyFileDiscovery)) }
65
- attr_reader :dotnet_tools_json
66
- end
67
- end
68
- end
@@ -1,105 +0,0 @@
1
- # typed: strict
2
- # frozen_string_literal: true
3
-
4
- #######################################################################
5
- # For more details on Dotnet version constraints, see: #
6
- # https://docs.microsoft.com/en-us/nuget/reference/package-versioning #
7
- #######################################################################
8
-
9
- require "sorbet-runtime"
10
-
11
- require "dependabot/update_checkers/base"
12
- require "dependabot/nuget/native_discovery/native_dependency_details"
13
- require "dependabot/nuget/version"
14
-
15
- module Dependabot
16
- module Nuget
17
- class NativeUpdateChecker < Dependabot::UpdateCheckers::Base
18
- class NativeRequirementsUpdater
19
- extend T::Sig
20
-
21
- sig do
22
- params(
23
- requirements: T::Array[T::Hash[Symbol, T.untyped]],
24
- dependency_details: T.nilable(Dependabot::Nuget::NativeDependencyDetails)
25
- )
26
- .void
27
- end
28
- def initialize(requirements:, dependency_details:)
29
- @requirements = requirements
30
- @dependency_details = dependency_details
31
- end
32
-
33
- sig { returns(T::Array[T::Hash[Symbol, T.untyped]]) }
34
- def updated_requirements
35
- return requirements unless clean_version
36
-
37
- # NOTE: Order is important here. The FileUpdater needs the updated
38
- # requirement at index `i` to correspond to the previous requirement
39
- # at the same index.
40
- requirements.map do |req|
41
- next req if req.fetch(:requirement).nil?
42
- next req if req.fetch(:requirement).include?(",")
43
-
44
- new_req =
45
- if req.fetch(:requirement).include?("*")
46
- update_wildcard_requirement(req.fetch(:requirement))
47
- else
48
- # Since range requirements are excluded by the line above we can
49
- # replace anything that looks like a version with the new
50
- # version
51
- req[:requirement].sub(
52
- /#{Nuget::Version::VERSION_PATTERN}/o,
53
- clean_version.to_s
54
- )
55
- end
56
-
57
- next req if new_req == req.fetch(:requirement)
58
-
59
- new_source = req[:source]&.dup
60
- unless @dependency_details.nil?
61
- new_source = {
62
- type: "nuget_repo",
63
- source_url: @dependency_details.info_url
64
- }
65
- end
66
-
67
- req.merge({ requirement: new_req, source: new_source })
68
- end
69
- end
70
-
71
- private
72
-
73
- sig { returns(T::Array[T::Hash[Symbol, T.untyped]]) }
74
- attr_reader :requirements
75
-
76
- sig { returns(T.class_of(Dependabot::Nuget::Version)) }
77
- def version_class
78
- Dependabot::Nuget::Version
79
- end
80
-
81
- sig { returns(T.nilable(Dependabot::Nuget::Version)) }
82
- def clean_version
83
- return unless @dependency_details&.version
84
-
85
- version_class.new(@dependency_details.version)
86
- end
87
-
88
- sig { params(req_string: String).returns(String) }
89
- def update_wildcard_requirement(req_string)
90
- return req_string if req_string == "*-*"
91
-
92
- return req_string if req_string == "*"
93
-
94
- precision = T.must(req_string.split("*").first).split(/\.|\-/).count
95
- wildcard_section = req_string.partition(/(?=[.\-]\*)/).last
96
-
97
- version_parts = T.must(clean_version).segments.first(precision)
98
- version = version_parts.join(".")
99
-
100
- version + wildcard_section
101
- end
102
- end
103
- end
104
- end
105
- end