dependabot-nuget 0.323.0 → 0.325.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 +4 -4
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Cli/Program.cs +0 -4
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Analyze/AnalyzeWorker.cs +1 -31
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Analyze/DependencyFinder.cs +0 -3
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Analyze/DependencyInfo.cs +1 -0
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Analyze/VersionFinder.cs +64 -10
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Clone/CloneWorker.cs +1 -1
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/DependencySolver/MSBuildDependencySolver.cs +10 -4
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Discover/DiscoveryWorker.cs +4 -4
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Discover/PackagesConfigDiscovery.cs +2 -2
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Discover/SdkProjectDiscovery.cs +31 -41
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/ExperimentsManager.cs +3 -6
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/ApiModel/Cooldown.cs +83 -0
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/ApiModel/Job.cs +2 -1
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/ModifiedFilesTracker.cs +9 -1
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/PullRequestBodyGenerator/DetailedPullRequestBodyGenerator.cs +6 -0
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/RunWorker.cs +8 -1
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/UpdateHandlers/CreateSecurityUpdatePullRequestHandler.cs +1 -1
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/UpdateHandlers/GroupUpdateAllVersionsHandler.cs +79 -67
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/UpdateHandlers/RefreshGroupUpdatePullRequestHandler.cs +1 -1
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/UpdateHandlers/RefreshSecurityUpdatePullRequestHandler.cs +1 -1
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/UpdateHandlers/RefreshVersionUpdatePullRequestHandler.cs +1 -1
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Updater/FileWriters/FileWriterWorker.cs +10 -7
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Updater/FileWriters/XmlFileWriter.cs +245 -125
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Updater/LockFileUpdater.cs +4 -11
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Updater/PackageReferenceUpdater.cs +4 -5
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Updater/UpdaterWorker.cs +1 -1
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Utilities/DependencyConflictResolver.cs +2 -2
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Utilities/MSBuildHelper.cs +14 -31
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Utilities/NuGetHelper.cs +3 -5
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Utilities/ProcessExtensions.cs +12 -13
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Utilities/XmlExtensions.cs +3 -3
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Analyze/AnalyzeWorkerTests.cs +78 -2
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Analyze/VersionFinderTests.cs +126 -3
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Clone/CloneWorkerTests.cs +14 -0
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/DependencySolver/MSBuildDependencySolverTests.cs +1 -2
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Discover/DiscoveryWorkerTestBase.cs +2 -2
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Discover/DiscoveryWorkerTests.Project.cs +1 -2
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Discover/DiscoveryWorkerTests.cs +0 -6
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Discover/SdkProjectDiscoveryTests.cs +2 -3
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/MockNuGetPackage.cs +1 -2
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Run/ApiModel/CooldownTests.cs +99 -0
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Run/MiscellaneousTests.cs +168 -4
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Run/PullRequestBodyGenerator/DetailedPullRequestBodyGeneratorTests.cs +71 -0
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Run/SerializationTests.cs +71 -0
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Run/UpdateHandlers/GroupUpdateAllVersionsHandlerTests.cs +70 -39
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Update/FileWriters/FileWriterWorkerTests.cs +43 -30
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Update/FileWriters/XmlFileWriterTests.cs +76 -3
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Update/PackageReferenceUpdaterTests.cs +0 -2
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Utilities/MSBuildHelperTests.cs +11 -27
- data/lib/dependabot/nuget.rb +3 -11
- metadata +8 -54
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Cli/Commands/AnalyzeCommand.cs +0 -49
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Cli/Commands/DiscoverCommand.cs +0 -60
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Cli/Commands/FrameworkCheckCommand.cs +0 -35
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Cli/Commands/UpdateCommand.cs +0 -58
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Cli.Test/EntryPointTests.Analyze.cs +0 -380
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Cli.Test/EntryPointTests.Discover.cs +0 -557
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Cli.Test/EntryPointTests.FrameworkCheck.cs +0 -37
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Cli.Test/EntryPointTests.Update.cs +0 -226
- data/lib/dependabot/nuget/analysis/analysis_json_reader.rb +0 -65
- data/lib/dependabot/nuget/analysis/dependency_analysis.rb +0 -66
- data/lib/dependabot/nuget/cache_manager.rb +0 -29
- data/lib/dependabot/nuget/discovery/dependency_details.rb +0 -102
- data/lib/dependabot/nuget/discovery/dependency_file_discovery.rb +0 -122
- data/lib/dependabot/nuget/discovery/discovery_json_reader.rb +0 -266
- data/lib/dependabot/nuget/discovery/evaluation_details.rb +0 -63
- data/lib/dependabot/nuget/discovery/project_discovery.rb +0 -104
- data/lib/dependabot/nuget/discovery/property_details.rb +0 -43
- data/lib/dependabot/nuget/discovery/workspace_discovery.rb +0 -61
- data/lib/dependabot/nuget/file_fetcher.rb +0 -46
- data/lib/dependabot/nuget/file_parser.rb +0 -153
- data/lib/dependabot/nuget/file_updater.rb +0 -256
- data/lib/dependabot/nuget/language.rb +0 -98
- data/lib/dependabot/nuget/metadata_finder.rb +0 -197
- data/lib/dependabot/nuget/native_helpers.rb +0 -364
- data/lib/dependabot/nuget/nuget_config_credential_helpers.rb +0 -88
- data/lib/dependabot/nuget/package_manager.rb +0 -51
- data/lib/dependabot/nuget/update_checker/requirements_updater.rb +0 -105
- data/lib/dependabot/nuget/update_checker.rb +0 -210
@@ -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/discovery/dependency_details"
|
13
|
-
require "dependabot/nuget/version"
|
14
|
-
|
15
|
-
module Dependabot
|
16
|
-
module Nuget
|
17
|
-
class UpdateChecker < Dependabot::UpdateCheckers::Base
|
18
|
-
class RequirementsUpdater
|
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::DependencyDetails)
|
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
|
@@ -1,210 +0,0 @@
|
|
1
|
-
# typed: strong
|
2
|
-
# frozen_string_literal: true
|
3
|
-
|
4
|
-
require "dependabot/nuget/analysis/analysis_json_reader"
|
5
|
-
require "dependabot/nuget/discovery/discovery_json_reader"
|
6
|
-
require "dependabot/update_checkers"
|
7
|
-
require "dependabot/update_checkers/base"
|
8
|
-
require "sorbet-runtime"
|
9
|
-
|
10
|
-
module Dependabot
|
11
|
-
module Nuget
|
12
|
-
class UpdateChecker < Dependabot::UpdateCheckers::Base
|
13
|
-
extend T::Sig
|
14
|
-
|
15
|
-
require_relative "update_checker/requirements_updater"
|
16
|
-
|
17
|
-
sig { override.returns(T.nilable(String)) }
|
18
|
-
def latest_version
|
19
|
-
# No need to find latest version for transitive dependencies unless they have a vulnerability.
|
20
|
-
return dependency.version if !dependency.top_level? && !vulnerable?
|
21
|
-
|
22
|
-
# if no update sources have the requisite package, then we can only assume that the current version is correct
|
23
|
-
@latest_version = T.let(
|
24
|
-
update_analysis.dependency_analysis.updated_version,
|
25
|
-
T.nilable(String)
|
26
|
-
)
|
27
|
-
end
|
28
|
-
|
29
|
-
sig { override.returns(T.nilable(T.any(String, Gem::Version))) }
|
30
|
-
def latest_resolvable_version
|
31
|
-
# We always want a full unlock since any package update could update peer dependencies as well.
|
32
|
-
# To force a full unlock instead of an own unlock, we return nil.
|
33
|
-
nil
|
34
|
-
end
|
35
|
-
|
36
|
-
sig { override.returns(Dependabot::Nuget::Version) }
|
37
|
-
def lowest_security_fix_version
|
38
|
-
update_analysis.dependency_analysis.numeric_updated_version
|
39
|
-
end
|
40
|
-
|
41
|
-
sig { override.returns(T.nilable(Dependabot::Nuget::Version)) }
|
42
|
-
def lowest_resolvable_security_fix_version
|
43
|
-
return nil if version_comes_from_multi_dependency_property?
|
44
|
-
|
45
|
-
update_analysis.dependency_analysis.numeric_updated_version
|
46
|
-
end
|
47
|
-
|
48
|
-
sig { override.returns(NilClass) }
|
49
|
-
def latest_resolvable_version_with_no_unlock
|
50
|
-
# Irrelevant, since Nuget has a single dependency file
|
51
|
-
nil
|
52
|
-
end
|
53
|
-
|
54
|
-
sig { override.returns(T::Array[T::Hash[Symbol, T.untyped]]) }
|
55
|
-
def updated_requirements
|
56
|
-
dep_details = updated_dependency_details.find { |d| d.name.casecmp?(dependency.name) }
|
57
|
-
RequirementsUpdater.new(
|
58
|
-
requirements: dependency.requirements,
|
59
|
-
dependency_details: dep_details
|
60
|
-
).updated_requirements
|
61
|
-
end
|
62
|
-
|
63
|
-
sig { returns(T::Boolean) }
|
64
|
-
def up_to_date?
|
65
|
-
!update_analysis.dependency_analysis.can_update
|
66
|
-
end
|
67
|
-
|
68
|
-
sig { returns(T::Boolean) }
|
69
|
-
def requirements_unlocked_or_can_be?
|
70
|
-
update_analysis.dependency_analysis.can_update
|
71
|
-
end
|
72
|
-
|
73
|
-
private
|
74
|
-
|
75
|
-
sig { returns(String) }
|
76
|
-
def job_file_path
|
77
|
-
ENV.fetch("DEPENDABOT_JOB_PATH")
|
78
|
-
end
|
79
|
-
|
80
|
-
sig { returns(AnalysisJsonReader) }
|
81
|
-
def update_analysis
|
82
|
-
@update_analysis ||= T.let(request_analysis, T.nilable(AnalysisJsonReader))
|
83
|
-
end
|
84
|
-
|
85
|
-
sig { returns(String) }
|
86
|
-
def dependency_file_path
|
87
|
-
d = File.join(Dir.tmpdir, "dependency")
|
88
|
-
FileUtils.mkdir_p(d)
|
89
|
-
File.join(d, "#{dependency.name}.json")
|
90
|
-
end
|
91
|
-
|
92
|
-
sig { returns(T::Array[String]) }
|
93
|
-
def dependency_file_paths
|
94
|
-
dependency_files.map do |file|
|
95
|
-
DiscoveryJsonReader.dependency_file_path(
|
96
|
-
repo_contents_path: T.must(repo_contents_path),
|
97
|
-
dependency_file: file
|
98
|
-
)
|
99
|
-
end
|
100
|
-
end
|
101
|
-
|
102
|
-
sig { returns(AnalysisJsonReader) }
|
103
|
-
def request_analysis
|
104
|
-
discovery_file_path = DiscoveryJsonReader.get_discovery_json_path_for_dependency_file_paths(
|
105
|
-
dependency_file_paths
|
106
|
-
)
|
107
|
-
analysis_folder_path = AnalysisJsonReader.temp_directory
|
108
|
-
|
109
|
-
write_dependency_info
|
110
|
-
|
111
|
-
NativeHelpers.run_nuget_analyze_tool(job_path: job_file_path,
|
112
|
-
repo_root: T.must(repo_contents_path),
|
113
|
-
discovery_file_path: discovery_file_path,
|
114
|
-
dependency_file_path: dependency_file_path,
|
115
|
-
analysis_folder_path: analysis_folder_path,
|
116
|
-
credentials: credentials)
|
117
|
-
|
118
|
-
analysis_json = AnalysisJsonReader.analysis_json(dependency_name: dependency.name)
|
119
|
-
|
120
|
-
AnalysisJsonReader.new(analysis_json: T.must(analysis_json))
|
121
|
-
end
|
122
|
-
|
123
|
-
sig { void }
|
124
|
-
def write_dependency_info
|
125
|
-
dependency_info = {
|
126
|
-
Name: dependency.name,
|
127
|
-
Version: dependency.version.to_s,
|
128
|
-
IsVulnerable: vulnerable?,
|
129
|
-
IgnoredVersions: ignored_versions,
|
130
|
-
Vulnerabilities: security_advisories.map do |vulnerability|
|
131
|
-
{
|
132
|
-
DependencyName: vulnerability.dependency_name,
|
133
|
-
PackageManager: vulnerability.package_manager,
|
134
|
-
VulnerableVersions: vulnerability.vulnerable_versions.map(&:to_s),
|
135
|
-
SafeVersions: vulnerability.safe_versions.map(&:to_s)
|
136
|
-
}
|
137
|
-
end
|
138
|
-
}.to_json
|
139
|
-
dependency_directory = File.dirname(dependency_file_path)
|
140
|
-
|
141
|
-
begin
|
142
|
-
Dir.mkdir(dependency_directory)
|
143
|
-
rescue StandardError
|
144
|
-
nil?
|
145
|
-
end
|
146
|
-
|
147
|
-
Dependabot.logger.info("Writing dependency info: #{dependency_info}")
|
148
|
-
File.write(dependency_file_path, dependency_info)
|
149
|
-
end
|
150
|
-
|
151
|
-
sig { returns(Dependabot::FileParsers::Base::DependencySet) }
|
152
|
-
def discovered_dependencies
|
153
|
-
DiscoveryJsonReader.load_discovery_for_dependency_file_paths(dependency_file_paths).dependency_set
|
154
|
-
end
|
155
|
-
|
156
|
-
sig { override.returns(T::Boolean) }
|
157
|
-
def latest_version_resolvable_with_full_unlock?
|
158
|
-
# We always want a full unlock since any package update could update peer dependencies as well.
|
159
|
-
true
|
160
|
-
end
|
161
|
-
|
162
|
-
sig { override.returns(T::Array[Dependabot::Dependency]) }
|
163
|
-
def updated_dependencies_after_full_unlock
|
164
|
-
dependencies = discovered_dependencies.dependencies
|
165
|
-
updated_dependency_details.filter_map do |dependency_details|
|
166
|
-
dep = dependencies.find { |d| d.name.casecmp(dependency_details.name)&.zero? }
|
167
|
-
next unless dep
|
168
|
-
|
169
|
-
metadata = {}
|
170
|
-
# For peer dependencies, instruct updater to not directly update this dependency
|
171
|
-
metadata = { information_only: true } unless dependency.name.casecmp(dependency_details.name)&.zero?
|
172
|
-
|
173
|
-
# rebuild the new requirements with the updated dependency details
|
174
|
-
updated_reqs = dep.requirements.map do |r|
|
175
|
-
r = r.clone
|
176
|
-
r[:requirement] = dependency_details.version
|
177
|
-
r[:source] = {
|
178
|
-
type: "nuget_repo",
|
179
|
-
source_url: dependency_details.info_url
|
180
|
-
}
|
181
|
-
r
|
182
|
-
end
|
183
|
-
|
184
|
-
Dependency.new(
|
185
|
-
name: dep.name,
|
186
|
-
version: dependency_details.version,
|
187
|
-
requirements: updated_reqs,
|
188
|
-
previous_version: dep.version,
|
189
|
-
previous_requirements: dep.requirements,
|
190
|
-
package_manager: dep.package_manager,
|
191
|
-
metadata: metadata
|
192
|
-
)
|
193
|
-
end
|
194
|
-
end
|
195
|
-
|
196
|
-
sig { returns(T::Array[Dependabot::Nuget::DependencyDetails]) }
|
197
|
-
def updated_dependency_details
|
198
|
-
@updated_dependency_details ||= T.let(update_analysis.dependency_analysis.updated_dependencies,
|
199
|
-
T.nilable(T::Array[Dependabot::Nuget::DependencyDetails]))
|
200
|
-
end
|
201
|
-
|
202
|
-
sig { returns(T::Boolean) }
|
203
|
-
def version_comes_from_multi_dependency_property?
|
204
|
-
update_analysis.dependency_analysis.version_comes_from_multi_dependency_property
|
205
|
-
end
|
206
|
-
end
|
207
|
-
end
|
208
|
-
end
|
209
|
-
|
210
|
-
Dependabot::UpdateCheckers.register("nuget", Dependabot::Nuget::UpdateChecker)
|