dependabot-nuget 0.278.0 → 0.280.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/build +1 -1
- data/helpers/lib/NuGetUpdater/.editorconfig +1 -0
- data/helpers/lib/NuGetUpdater/Directory.Build.props +1 -0
- data/helpers/lib/NuGetUpdater/Directory.Common.props +1 -1
- data/helpers/lib/NuGetUpdater/Directory.Packages.props +6 -1
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Cli.Test/EntryPointTests.Analyze.cs +7 -0
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Cli.Test/EntryPointTests.Discover.cs +6 -0
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Cli.Test/EntryPointTests.Update.cs +2 -3
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Analyze/AnalyzeWorker.cs +95 -84
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Analyze/Requirement.cs +2 -2
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Discover/DiscoveryWorker.cs +53 -46
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/ErrorType.cs +1 -0
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/NativeResult.cs +1 -1
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/ApiModel/DependencyFileNotFound.cs +6 -0
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/ApiModel/JobErrorBase.cs +11 -0
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/ApiModel/PrivateSourceAuthenticationFailure.cs +6 -0
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/ApiModel/UnknownError.cs +6 -0
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/ApiModel/UpdateNotPossible.cs +6 -0
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/HttpApiHandler.cs +5 -0
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/IApiHandler.cs +1 -0
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/RunWorker.cs +67 -15
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/UpdateNotPossibleException.cs +11 -0
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Updater/LockFileUpdater.cs +1 -1
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Updater/PackagesConfigUpdater.cs +2 -0
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Updater/SdkPackageUpdater.cs +2 -2
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Updater/UpdaterWorker.cs +58 -39
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Utilities/MSBuildHelper.cs +16 -5
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Utilities/NuGetHelper.cs +1 -1
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Utilities/ProcessExtensions.cs +2 -4
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Analyze/AnalyzeWorkerTestBase.cs +5 -9
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Analyze/RequirementTests.cs +4 -1
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Discover/DiscoveryWorkerTestBase.cs +5 -8
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/MockNuGetPackage.cs +10 -1
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Run/RunWorkerTests.cs +92 -0
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Run/TestApiHandler.cs +10 -4
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Update/UpdateWorkerTestBase.cs +10 -15
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Update/UpdateWorkerTests.PackagesConfig.cs +79 -1
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Update/UpdateWorkerTests.Sdk.cs +10 -1
- data/helpers/lib/NuGetUpdater/global.json +1 -1
- data/lib/dependabot/nuget/file_updater.rb +5 -1
- data/lib/dependabot/nuget/native_helpers.rb +9 -4
- data/lib/dependabot/nuget/requirement.rb +2 -0
- data/lib/dependabot/nuget/update_checker/repository_finder.rb +26 -2
- metadata +16 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2728d8749a316ac4ecbd46826beffaefc51e5101c1154d0fdef5ad756158c256
|
4
|
+
data.tar.gz: 3ec34208b76ed22dbef3ae0e49511e77f85d73aea1b980180292b5225e26367a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4cf2906e79a866fb5c4d89807e893d6486f1fae08b9b951da9a049fbd546cc59d522d6b8ace80fe0ee59353eb93224b648370b404bf69ff845d89fafd70894ba
|
7
|
+
data.tar.gz: '05801823dee91eba1e490ee4fef1d44a2e83f632c7823c5ae6bd9cd3955d085c8c6c5e015023c4a6a0e34ed453e2e3d956c9399f955d608fd87381ef2ff620d7'
|
data/helpers/build
CHANGED
@@ -9,7 +9,7 @@
|
|
9
9
|
NuGetUpdater\NuGetUpdater.Core\FrameworkChecker\SupportedFrameworks.cs
|
10
10
|
2. Update tests as needed at `NuGetUpdater\NuGetUpdater.Core.Test\FrameworkChecker\CompatibilityCheckerFacts.cs`
|
11
11
|
-->
|
12
|
-
<CommonTargetFramework>
|
12
|
+
<CommonTargetFramework>net9.0</CommonTargetFramework>
|
13
13
|
<ImplicitUsings>enable</ImplicitUsings>
|
14
14
|
<UseArtifactsOutput>true</UseArtifactsOutput>
|
15
15
|
<ArtifactsPath>$(MSBuildThisFileDirectory)artifacts</ArtifactsPath>
|
@@ -7,7 +7,7 @@
|
|
7
7
|
<ItemGroup>
|
8
8
|
<PackageVersion Include="DiffPlex" Version="1.7.1" />
|
9
9
|
|
10
|
-
<PackageVersion Include="GuiLabs.Language.Xml" Version="1.2.
|
10
|
+
<PackageVersion Include="GuiLabs.Language.Xml" Version="1.2.93" />
|
11
11
|
|
12
12
|
<PackageVersion Include="Microsoft.Build.Locator" Version="1.6.1" />
|
13
13
|
<PackageVersion Include="Microsoft.Build" Version="17.5.0" ExcludeAssets="Runtime" PrivateAssets="All" />
|
@@ -20,6 +20,11 @@
|
|
20
20
|
<PackageVersion Include="NuGet.Core" Version="2.14.0-rtm-832" Aliases="CoreV2" />
|
21
21
|
|
22
22
|
<PackageVersion Include="System.CommandLine" Version="2.0.0-beta4.22272.1" />
|
23
|
+
<PackageVersion Include="System.Net.Http" Version="4.3.4" />
|
24
|
+
<PackageVersion Include="System.Formats.Asn1" Version="8.0.1" />
|
25
|
+
<PackageVersion Include="System.Security.Cryptography.Pkcs" Version="8.0.0" />
|
26
|
+
<PackageVersion Include="System.Text.Json" Version="8.0.4" />
|
27
|
+
<PackageVersion Include="System.Text.RegularExpressions" Version="4.3.1" />
|
23
28
|
|
24
29
|
<PackageVersion Include="xunit" Version="2.4.2" />
|
25
30
|
<PackageVersion Include="xunit.runner.visualstudio" Version="2.4.5" />
|
@@ -1,8 +1,10 @@
|
|
1
1
|
using System.Text;
|
2
|
+
using System.Text.Json;
|
2
3
|
using System.Xml.Linq;
|
3
4
|
|
4
5
|
using NuGetUpdater.Core;
|
5
6
|
using NuGetUpdater.Core.Analyze;
|
7
|
+
using NuGetUpdater.Core.Discover;
|
6
8
|
using NuGetUpdater.Core.Test;
|
7
9
|
using NuGetUpdater.Core.Test.Analyze;
|
8
10
|
using NuGetUpdater.Core.Test.Update;
|
@@ -334,6 +336,11 @@ public partial class EntryPointTests
|
|
334
336
|
Console.SetOut(originalOut);
|
335
337
|
Console.SetError(originalErr);
|
336
338
|
}
|
339
|
+
|
340
|
+
var resultPath = Path.Join(path, AnalyzeWorker.AnalysisDirectoryName, $"{dependencyName}.json");
|
341
|
+
var resultJson = await File.ReadAllTextAsync(resultPath);
|
342
|
+
var resultObject = JsonSerializer.Deserialize<AnalysisResult>(resultJson, DiscoveryWorker.SerializerOptions);
|
343
|
+
return resultObject!;
|
337
344
|
});
|
338
345
|
|
339
346
|
ValidateAnalysisResult(expectedResult, actualResult);
|
@@ -1,4 +1,5 @@
|
|
1
1
|
using System.Text;
|
2
|
+
using System.Text.Json;
|
2
3
|
|
3
4
|
using NuGetUpdater.Core;
|
4
5
|
using NuGetUpdater.Core.Discover;
|
@@ -390,6 +391,11 @@ public partial class EntryPointTests
|
|
390
391
|
Console.SetOut(originalOut);
|
391
392
|
Console.SetError(originalErr);
|
392
393
|
}
|
394
|
+
|
395
|
+
var resultPath = Path.Join(path, DiscoveryWorker.DiscoveryResultFileName);
|
396
|
+
var resultJson = await File.ReadAllTextAsync(resultPath);
|
397
|
+
var resultObject = JsonSerializer.Deserialize<WorkspaceDiscoveryResult>(resultJson, DiscoveryWorker.SerializerOptions);
|
398
|
+
return resultObject!;
|
393
399
|
});
|
394
400
|
|
395
401
|
ValidateWorkspaceResult(expectedResult, actualResult);
|
@@ -352,8 +352,7 @@ public partial class EntryPointTests
|
|
352
352
|
</Project>
|
353
353
|
""");
|
354
354
|
var executableName = Path.Join(Path.GetDirectoryName(GetType().Assembly.Location), "NuGetUpdater.Cli.dll");
|
355
|
-
|
356
|
-
[
|
355
|
+
IEnumerable<string> executableArgs = [
|
357
356
|
executableName,
|
358
357
|
"update",
|
359
358
|
"--repo-root",
|
@@ -367,7 +366,7 @@ public partial class EntryPointTests
|
|
367
366
|
"--previous-version",
|
368
367
|
"7.0.1",
|
369
368
|
"--verbose"
|
370
|
-
]
|
369
|
+
];
|
371
370
|
|
372
371
|
// verify base run
|
373
372
|
var workingDirectory = tempDir.DirectoryPath;
|
@@ -31,12 +31,39 @@ public partial class AnalyzeWorker
|
|
31
31
|
|
32
32
|
public async Task RunAsync(string repoRoot, string discoveryPath, string dependencyPath, string analysisDirectory)
|
33
33
|
{
|
34
|
-
var
|
34
|
+
var analysisResult = await RunWithErrorHandlingAsync(repoRoot, discoveryPath, dependencyPath);
|
35
35
|
var dependencyInfo = await DeserializeJsonFileAsync<DependencyInfo>(dependencyPath, nameof(DependencyInfo));
|
36
|
-
var analysisResult = await RunAsync(repoRoot, discovery, dependencyInfo);
|
37
36
|
await WriteResultsAsync(analysisDirectory, dependencyInfo.Name, analysisResult, _logger);
|
38
37
|
}
|
39
38
|
|
39
|
+
internal async Task<AnalysisResult> RunWithErrorHandlingAsync(string repoRoot, string discoveryPath, string dependencyPath)
|
40
|
+
{
|
41
|
+
AnalysisResult analysisResult;
|
42
|
+
var discovery = await DeserializeJsonFileAsync<WorkspaceDiscoveryResult>(discoveryPath, nameof(WorkspaceDiscoveryResult));
|
43
|
+
var dependencyInfo = await DeserializeJsonFileAsync<DependencyInfo>(dependencyPath, nameof(DependencyInfo));
|
44
|
+
|
45
|
+
try
|
46
|
+
{
|
47
|
+
analysisResult = await RunAsync(repoRoot, discovery, dependencyInfo);
|
48
|
+
}
|
49
|
+
catch (HttpRequestException ex)
|
50
|
+
when (ex.StatusCode == HttpStatusCode.Unauthorized || ex.StatusCode == HttpStatusCode.Forbidden)
|
51
|
+
{
|
52
|
+
var localPath = PathHelper.JoinPath(repoRoot, discovery.Path);
|
53
|
+
var nugetContext = new NuGetContext(localPath);
|
54
|
+
analysisResult = new AnalysisResult
|
55
|
+
{
|
56
|
+
ErrorType = ErrorType.AuthenticationFailure,
|
57
|
+
ErrorDetails = "(" + string.Join("|", nugetContext.PackageSources.Select(s => s.Source)) + ")",
|
58
|
+
UpdatedVersion = string.Empty,
|
59
|
+
CanUpdate = false,
|
60
|
+
UpdatedDependencies = [],
|
61
|
+
};
|
62
|
+
}
|
63
|
+
|
64
|
+
return analysisResult;
|
65
|
+
}
|
66
|
+
|
40
67
|
public async Task<AnalysisResult> RunAsync(string repoRoot, WorkspaceDiscoveryResult discovery, DependencyInfo dependencyInfo)
|
41
68
|
{
|
42
69
|
var startingDirectory = PathHelper.JoinPath(repoRoot, discovery.Path);
|
@@ -68,100 +95,84 @@ public partial class AnalyzeWorker
|
|
68
95
|
var isUpdateNecessary = isProjectUpdateNecessary || dotnetToolsHasDependency || globalJsonHasDependency;
|
69
96
|
using var nugetContext = new NuGetContext(startingDirectory);
|
70
97
|
AnalysisResult analysisResult;
|
71
|
-
|
98
|
+
if (isUpdateNecessary)
|
72
99
|
{
|
73
|
-
|
100
|
+
_logger.Log($" Determining multi-dependency property.");
|
101
|
+
var multiDependencies = DetermineMultiDependencyDetails(
|
102
|
+
discovery,
|
103
|
+
dependencyInfo.Name,
|
104
|
+
propertyBasedDependencies);
|
105
|
+
|
106
|
+
usesMultiDependencyProperty = multiDependencies.Any(md => md.DependencyNames.Count > 1);
|
107
|
+
var dependenciesToUpdate = usesMultiDependencyProperty
|
108
|
+
? multiDependencies
|
109
|
+
.SelectMany(md => md.DependencyNames)
|
110
|
+
.ToImmutableHashSet(StringComparer.OrdinalIgnoreCase)
|
111
|
+
: [dependencyInfo.Name];
|
112
|
+
var applicableTargetFrameworks = usesMultiDependencyProperty
|
113
|
+
? multiDependencies
|
114
|
+
.SelectMany(md => md.TargetFrameworks)
|
115
|
+
.ToImmutableHashSet(StringComparer.OrdinalIgnoreCase)
|
116
|
+
.Select(NuGetFramework.Parse)
|
117
|
+
.ToImmutableArray()
|
118
|
+
: projectFrameworks;
|
119
|
+
|
120
|
+
_logger.Log($" Finding updated version.");
|
121
|
+
updatedVersion = await FindUpdatedVersionAsync(
|
122
|
+
startingDirectory,
|
123
|
+
dependencyInfo,
|
124
|
+
dependenciesToUpdate,
|
125
|
+
applicableTargetFrameworks,
|
126
|
+
nugetContext,
|
127
|
+
_logger,
|
128
|
+
CancellationToken.None);
|
129
|
+
|
130
|
+
_logger.Log($" Finding updated peer dependencies.");
|
131
|
+
if (updatedVersion is null)
|
132
|
+
{
|
133
|
+
updatedDependencies = [];
|
134
|
+
}
|
135
|
+
else if (isProjectUpdateNecessary)
|
74
136
|
{
|
75
|
-
|
76
|
-
|
137
|
+
updatedDependencies = await FindUpdatedDependenciesAsync(
|
138
|
+
repoRoot,
|
77
139
|
discovery,
|
78
|
-
dependencyInfo.Name,
|
79
|
-
propertyBasedDependencies);
|
80
|
-
|
81
|
-
usesMultiDependencyProperty = multiDependencies.Any(md => md.DependencyNames.Count > 1);
|
82
|
-
var dependenciesToUpdate = usesMultiDependencyProperty
|
83
|
-
? multiDependencies
|
84
|
-
.SelectMany(md => md.DependencyNames)
|
85
|
-
.ToImmutableHashSet(StringComparer.OrdinalIgnoreCase)
|
86
|
-
: [dependencyInfo.Name];
|
87
|
-
var applicableTargetFrameworks = usesMultiDependencyProperty
|
88
|
-
? multiDependencies
|
89
|
-
.SelectMany(md => md.TargetFrameworks)
|
90
|
-
.ToImmutableHashSet(StringComparer.OrdinalIgnoreCase)
|
91
|
-
.Select(NuGetFramework.Parse)
|
92
|
-
.ToImmutableArray()
|
93
|
-
: projectFrameworks;
|
94
|
-
|
95
|
-
_logger.Log($" Finding updated version.");
|
96
|
-
updatedVersion = await FindUpdatedVersionAsync(
|
97
|
-
startingDirectory,
|
98
|
-
dependencyInfo,
|
99
140
|
dependenciesToUpdate,
|
100
|
-
|
141
|
+
updatedVersion,
|
101
142
|
nugetContext,
|
102
143
|
_logger,
|
103
144
|
CancellationToken.None);
|
104
|
-
|
105
|
-
_logger.Log($" Finding updated peer dependencies.");
|
106
|
-
if (updatedVersion is null)
|
107
|
-
{
|
108
|
-
updatedDependencies = [];
|
109
|
-
}
|
110
|
-
else if (isProjectUpdateNecessary)
|
111
|
-
{
|
112
|
-
updatedDependencies = await FindUpdatedDependenciesAsync(
|
113
|
-
repoRoot,
|
114
|
-
discovery,
|
115
|
-
dependenciesToUpdate,
|
116
|
-
updatedVersion,
|
117
|
-
nugetContext,
|
118
|
-
_logger,
|
119
|
-
CancellationToken.None);
|
120
|
-
}
|
121
|
-
else if (dotnetToolsHasDependency)
|
122
|
-
{
|
123
|
-
var infoUrl = await nugetContext.GetPackageInfoUrlAsync(dependencyInfo.Name, updatedVersion.ToNormalizedString(), CancellationToken.None);
|
124
|
-
updatedDependencies = [new Dependency(dependencyInfo.Name, updatedVersion.ToNormalizedString(), DependencyType.DotNetTool, IsDirect: true, InfoUrl: infoUrl)];
|
125
|
-
}
|
126
|
-
else if (globalJsonHasDependency)
|
127
|
-
{
|
128
|
-
var infoUrl = await nugetContext.GetPackageInfoUrlAsync(dependencyInfo.Name, updatedVersion.ToNormalizedString(), CancellationToken.None);
|
129
|
-
updatedDependencies = [new Dependency(dependencyInfo.Name, updatedVersion.ToNormalizedString(), DependencyType.MSBuildSdk, IsDirect: true, InfoUrl: infoUrl)];
|
130
|
-
}
|
131
|
-
else
|
132
|
-
{
|
133
|
-
throw new InvalidOperationException("Unreachable.");
|
134
|
-
}
|
135
|
-
|
136
|
-
//TODO: At this point we should add the peer dependencies to a queue where
|
137
|
-
// we will analyze them one by one to see if they themselves are part of a
|
138
|
-
// multi-dependency property. Basically looping this if-body until we have
|
139
|
-
// emptied the queue and have a complete list of updated dependencies. We
|
140
|
-
// should track the dependenciesToUpdate as they have already been analyzed.
|
141
145
|
}
|
142
|
-
|
143
|
-
analysisResult = new AnalysisResult
|
146
|
+
else if (dotnetToolsHasDependency)
|
144
147
|
{
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
};
|
150
|
-
}
|
151
|
-
catch (HttpRequestException ex)
|
152
|
-
when (ex.StatusCode == HttpStatusCode.Unauthorized || ex.StatusCode == HttpStatusCode.Forbidden)
|
153
|
-
{
|
154
|
-
// TODO: consolidate this error handling between AnalyzeWorker, DiscoveryWorker, and UpdateWorker
|
155
|
-
analysisResult = new AnalysisResult
|
148
|
+
var infoUrl = await nugetContext.GetPackageInfoUrlAsync(dependencyInfo.Name, updatedVersion.ToNormalizedString(), CancellationToken.None);
|
149
|
+
updatedDependencies = [new Dependency(dependencyInfo.Name, updatedVersion.ToNormalizedString(), DependencyType.DotNetTool, IsDirect: true, InfoUrl: infoUrl)];
|
150
|
+
}
|
151
|
+
else if (globalJsonHasDependency)
|
156
152
|
{
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
153
|
+
var infoUrl = await nugetContext.GetPackageInfoUrlAsync(dependencyInfo.Name, updatedVersion.ToNormalizedString(), CancellationToken.None);
|
154
|
+
updatedDependencies = [new Dependency(dependencyInfo.Name, updatedVersion.ToNormalizedString(), DependencyType.MSBuildSdk, IsDirect: true, InfoUrl: infoUrl)];
|
155
|
+
}
|
156
|
+
else
|
157
|
+
{
|
158
|
+
throw new InvalidOperationException("Unreachable.");
|
159
|
+
}
|
160
|
+
|
161
|
+
//TODO: At this point we should add the peer dependencies to a queue where
|
162
|
+
// we will analyze them one by one to see if they themselves are part of a
|
163
|
+
// multi-dependency property. Basically looping this if-body until we have
|
164
|
+
// emptied the queue and have a complete list of updated dependencies. We
|
165
|
+
// should track the dependenciesToUpdate as they have already been analyzed.
|
163
166
|
}
|
164
167
|
|
168
|
+
analysisResult = new AnalysisResult
|
169
|
+
{
|
170
|
+
UpdatedVersion = updatedVersion?.ToNormalizedString() ?? dependencyInfo.Version,
|
171
|
+
CanUpdate = updatedVersion is not null,
|
172
|
+
VersionComesFromMultiDependencyProperty = usesMultiDependencyProperty,
|
173
|
+
UpdatedDependencies = updatedDependencies,
|
174
|
+
};
|
175
|
+
|
165
176
|
_logger.Log($"Analysis complete.");
|
166
177
|
return analysisResult;
|
167
178
|
}
|
@@ -52,10 +52,10 @@ public abstract class Requirement
|
|
52
52
|
|
53
53
|
public static Requirement Parse(string requirement)
|
54
54
|
{
|
55
|
-
var specificParts = requirement.Split(',');
|
55
|
+
var specificParts = requirement.Split(',').Where(p => !string.IsNullOrWhiteSpace(p)).ToArray();
|
56
56
|
if (specificParts.Length == 1)
|
57
57
|
{
|
58
|
-
return IndividualRequirement.ParseIndividual(
|
58
|
+
return IndividualRequirement.ParseIndividual(specificParts[0]);
|
59
59
|
}
|
60
60
|
|
61
61
|
var specificRequirements = specificParts.Select(IndividualRequirement.ParseIndividual).ToArray();
|
@@ -30,7 +30,35 @@ public partial class DiscoveryWorker
|
|
30
30
|
_logger = logger;
|
31
31
|
}
|
32
32
|
|
33
|
-
public async Task
|
33
|
+
public async Task RunAsync(string repoRootPath, string workspacePath, string outputPath)
|
34
|
+
{
|
35
|
+
var result = await RunWithErrorHandlingAsync(repoRootPath, workspacePath);
|
36
|
+
await WriteResultsAsync(repoRootPath, outputPath, result);
|
37
|
+
}
|
38
|
+
|
39
|
+
internal async Task<WorkspaceDiscoveryResult> RunWithErrorHandlingAsync(string repoRootPath, string workspacePath)
|
40
|
+
{
|
41
|
+
WorkspaceDiscoveryResult result;
|
42
|
+
try
|
43
|
+
{
|
44
|
+
result = await RunAsync(repoRootPath, workspacePath);
|
45
|
+
}
|
46
|
+
catch (HttpRequestException ex)
|
47
|
+
when (ex.StatusCode == HttpStatusCode.Unauthorized || ex.StatusCode == HttpStatusCode.Forbidden)
|
48
|
+
{
|
49
|
+
result = new WorkspaceDiscoveryResult
|
50
|
+
{
|
51
|
+
ErrorType = ErrorType.AuthenticationFailure,
|
52
|
+
ErrorDetails = "(" + string.Join("|", NuGetContext.GetPackageSourceUrls(PathHelper.JoinPath(repoRootPath, workspacePath))) + ")",
|
53
|
+
Path = workspacePath,
|
54
|
+
Projects = [],
|
55
|
+
};
|
56
|
+
}
|
57
|
+
|
58
|
+
return result;
|
59
|
+
}
|
60
|
+
|
61
|
+
internal async Task<WorkspaceDiscoveryResult> RunAsync(string repoRootPath, string workspacePath)
|
34
62
|
{
|
35
63
|
MSBuildHelper.RegisterMSBuild(Environment.CurrentDirectory, repoRootPath);
|
36
64
|
|
@@ -51,69 +79,48 @@ public partial class DiscoveryWorker
|
|
51
79
|
ImmutableArray<ProjectDiscoveryResult> projectResults = [];
|
52
80
|
WorkspaceDiscoveryResult result;
|
53
81
|
|
54
|
-
|
82
|
+
if (Directory.Exists(workspacePath))
|
55
83
|
{
|
56
|
-
|
57
|
-
{
|
58
|
-
_logger.Log($"Discovering build files in workspace [{workspacePath}].");
|
84
|
+
_logger.Log($"Discovering build files in workspace [{workspacePath}].");
|
59
85
|
|
60
|
-
|
61
|
-
|
86
|
+
dotNetToolsJsonDiscovery = DotNetToolsJsonDiscovery.Discover(repoRootPath, workspacePath, _logger);
|
87
|
+
globalJsonDiscovery = GlobalJsonDiscovery.Discover(repoRootPath, workspacePath, _logger);
|
62
88
|
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
89
|
+
if (globalJsonDiscovery is not null)
|
90
|
+
{
|
91
|
+
await TryRestoreMSBuildSdksAsync(repoRootPath, workspacePath, globalJsonDiscovery.Dependencies, _logger);
|
92
|
+
}
|
67
93
|
|
68
|
-
|
69
|
-
|
94
|
+
// this next line should throw or something
|
95
|
+
projectResults = await RunForDirectoryAsnyc(repoRootPath, workspacePath);
|
70
96
|
|
71
|
-
|
97
|
+
directoryPackagesPropsDiscovery = DirectoryPackagesPropsDiscovery.Discover(repoRootPath, workspacePath, projectResults, _logger);
|
72
98
|
|
73
|
-
|
74
|
-
{
|
75
|
-
projectResults = projectResults.Remove(projectResults.First(p => p.FilePath.Equals(directoryPackagesPropsDiscovery.FilePath, StringComparison.OrdinalIgnoreCase)));
|
76
|
-
}
|
77
|
-
}
|
78
|
-
else
|
99
|
+
if (directoryPackagesPropsDiscovery is not null)
|
79
100
|
{
|
80
|
-
|
101
|
+
projectResults = projectResults.Remove(projectResults.First(p => p.FilePath.Equals(directoryPackagesPropsDiscovery.FilePath, StringComparison.OrdinalIgnoreCase)));
|
81
102
|
}
|
82
|
-
|
83
|
-
result = new WorkspaceDiscoveryResult
|
84
|
-
{
|
85
|
-
Path = initialWorkspacePath,
|
86
|
-
DotNetToolsJson = dotNetToolsJsonDiscovery,
|
87
|
-
GlobalJson = globalJsonDiscovery,
|
88
|
-
DirectoryPackagesProps = directoryPackagesPropsDiscovery,
|
89
|
-
Projects = projectResults.OrderBy(p => p.FilePath).ToImmutableArray(),
|
90
|
-
};
|
91
103
|
}
|
92
|
-
|
93
|
-
when (ex.StatusCode == HttpStatusCode.Unauthorized || ex.StatusCode == HttpStatusCode.Forbidden)
|
104
|
+
else
|
94
105
|
{
|
95
|
-
|
96
|
-
result = new WorkspaceDiscoveryResult
|
97
|
-
{
|
98
|
-
ErrorType = ErrorType.AuthenticationFailure,
|
99
|
-
ErrorDetails = "(" + string.Join("|", NuGetContext.GetPackageSourceUrls(workspacePath)) + ")",
|
100
|
-
Path = initialWorkspacePath,
|
101
|
-
Projects = [],
|
102
|
-
};
|
106
|
+
_logger.Log($"Workspace path [{workspacePath}] does not exist.");
|
103
107
|
}
|
104
108
|
|
109
|
+
result = new WorkspaceDiscoveryResult
|
110
|
+
{
|
111
|
+
Path = initialWorkspacePath,
|
112
|
+
DotNetToolsJson = dotNetToolsJsonDiscovery,
|
113
|
+
GlobalJson = globalJsonDiscovery,
|
114
|
+
DirectoryPackagesProps = directoryPackagesPropsDiscovery,
|
115
|
+
Projects = projectResults.OrderBy(p => p.FilePath).ToImmutableArray(),
|
116
|
+
};
|
117
|
+
|
105
118
|
_logger.Log("Discovery complete.");
|
106
119
|
_processedProjectPaths.Clear();
|
107
120
|
|
108
121
|
return result;
|
109
122
|
}
|
110
123
|
|
111
|
-
public async Task RunAsync(string repoRootPath, string workspacePath, string outputPath)
|
112
|
-
{
|
113
|
-
var result = await RunAsync(repoRootPath, workspacePath);
|
114
|
-
await WriteResultsAsync(repoRootPath, outputPath, result);
|
115
|
-
}
|
116
|
-
|
117
124
|
/// <summary>
|
118
125
|
/// Restores MSBuild SDKs from the given dependencies.
|
119
126
|
/// </summary>
|
@@ -0,0 +1,11 @@
|
|
1
|
+
using System.Text.Json.Serialization;
|
2
|
+
|
3
|
+
namespace NuGetUpdater.Core.Run.ApiModel;
|
4
|
+
|
5
|
+
public abstract record JobErrorBase
|
6
|
+
{
|
7
|
+
[JsonPropertyName("error-type")]
|
8
|
+
public abstract string Type { get; }
|
9
|
+
[JsonPropertyName("error-details")]
|
10
|
+
public required object Details { get; init; }
|
11
|
+
}
|
@@ -25,6 +25,11 @@ public class HttpApiHandler : IApiHandler
|
|
25
25
|
_jobId = jobId;
|
26
26
|
}
|
27
27
|
|
28
|
+
public async Task RecordUpdateJobError(JobErrorBase error)
|
29
|
+
{
|
30
|
+
await PostAsJson("record_update_job_error", error);
|
31
|
+
}
|
32
|
+
|
28
33
|
public async Task UpdateDependencyList(UpdatedDependencyList updatedDependencyList)
|
29
34
|
{
|
30
35
|
await PostAsJson("update_dependency_list", updatedDependencyList);
|
@@ -4,6 +4,7 @@ namespace NuGetUpdater.Core.Run;
|
|
4
4
|
|
5
5
|
public interface IApiHandler
|
6
6
|
{
|
7
|
+
Task RecordUpdateJobError(JobErrorBase error);
|
7
8
|
Task UpdateDependencyList(UpdatedDependencyList updatedDependencyList);
|
8
9
|
Task IncrementMetric(IncrementMetric incrementMetric);
|
9
10
|
Task CreatePullRequest(CreatePullRequest createPullRequest);
|