dependabot-nuget 0.323.0 → 0.325.1

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 (80) hide show
  1. checksums.yaml +4 -4
  2. data/helpers/lib/NuGetUpdater/NuGetUpdater.Cli/Program.cs +0 -4
  3. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Analyze/AnalyzeWorker.cs +1 -31
  4. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Analyze/DependencyFinder.cs +0 -3
  5. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Analyze/DependencyInfo.cs +1 -0
  6. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Analyze/VersionFinder.cs +64 -10
  7. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Clone/CloneWorker.cs +1 -1
  8. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/DependencySolver/MSBuildDependencySolver.cs +10 -4
  9. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Discover/DiscoveryWorker.cs +4 -4
  10. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Discover/PackagesConfigDiscovery.cs +2 -2
  11. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Discover/SdkProjectDiscovery.cs +31 -41
  12. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/ExperimentsManager.cs +3 -6
  13. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/ApiModel/Cooldown.cs +83 -0
  14. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/ApiModel/Job.cs +2 -1
  15. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/ModifiedFilesTracker.cs +9 -1
  16. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/PullRequestBodyGenerator/DetailedPullRequestBodyGenerator.cs +6 -0
  17. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/RunWorker.cs +8 -1
  18. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/UpdateHandlers/CreateSecurityUpdatePullRequestHandler.cs +1 -1
  19. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/UpdateHandlers/GroupUpdateAllVersionsHandler.cs +79 -67
  20. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/UpdateHandlers/RefreshGroupUpdatePullRequestHandler.cs +1 -1
  21. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/UpdateHandlers/RefreshSecurityUpdatePullRequestHandler.cs +1 -1
  22. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/UpdateHandlers/RefreshVersionUpdatePullRequestHandler.cs +1 -1
  23. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Updater/FileWriters/FileWriterWorker.cs +10 -7
  24. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Updater/FileWriters/XmlFileWriter.cs +245 -125
  25. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Updater/LockFileUpdater.cs +4 -11
  26. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Updater/PackageReferenceUpdater.cs +4 -5
  27. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Updater/UpdaterWorker.cs +1 -1
  28. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Utilities/DependencyConflictResolver.cs +2 -2
  29. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Utilities/MSBuildHelper.cs +14 -31
  30. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Utilities/NuGetHelper.cs +3 -5
  31. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Utilities/ProcessExtensions.cs +12 -13
  32. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Utilities/XmlExtensions.cs +3 -3
  33. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Analyze/AnalyzeWorkerTests.cs +78 -2
  34. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Analyze/VersionFinderTests.cs +126 -3
  35. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Clone/CloneWorkerTests.cs +14 -0
  36. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/DependencySolver/MSBuildDependencySolverTests.cs +1 -2
  37. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Discover/DiscoveryWorkerTestBase.cs +2 -2
  38. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Discover/DiscoveryWorkerTests.Project.cs +1 -2
  39. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Discover/DiscoveryWorkerTests.cs +0 -6
  40. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Discover/SdkProjectDiscoveryTests.cs +2 -3
  41. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/MockNuGetPackage.cs +1 -2
  42. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Run/ApiModel/CooldownTests.cs +99 -0
  43. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Run/MiscellaneousTests.cs +168 -4
  44. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Run/PullRequestBodyGenerator/DetailedPullRequestBodyGeneratorTests.cs +71 -0
  45. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Run/SerializationTests.cs +71 -0
  46. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Run/UpdateHandlers/GroupUpdateAllVersionsHandlerTests.cs +70 -39
  47. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Update/FileWriters/FileWriterWorkerTests.cs +43 -30
  48. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Update/FileWriters/XmlFileWriterTests.cs +76 -3
  49. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Update/PackageReferenceUpdaterTests.cs +0 -2
  50. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Utilities/MSBuildHelperTests.cs +11 -27
  51. data/lib/dependabot/nuget.rb +3 -11
  52. metadata +8 -54
  53. data/helpers/lib/NuGetUpdater/NuGetUpdater.Cli/Commands/AnalyzeCommand.cs +0 -49
  54. data/helpers/lib/NuGetUpdater/NuGetUpdater.Cli/Commands/DiscoverCommand.cs +0 -60
  55. data/helpers/lib/NuGetUpdater/NuGetUpdater.Cli/Commands/FrameworkCheckCommand.cs +0 -35
  56. data/helpers/lib/NuGetUpdater/NuGetUpdater.Cli/Commands/UpdateCommand.cs +0 -58
  57. data/helpers/lib/NuGetUpdater/NuGetUpdater.Cli.Test/EntryPointTests.Analyze.cs +0 -380
  58. data/helpers/lib/NuGetUpdater/NuGetUpdater.Cli.Test/EntryPointTests.Discover.cs +0 -557
  59. data/helpers/lib/NuGetUpdater/NuGetUpdater.Cli.Test/EntryPointTests.FrameworkCheck.cs +0 -37
  60. data/helpers/lib/NuGetUpdater/NuGetUpdater.Cli.Test/EntryPointTests.Update.cs +0 -226
  61. data/lib/dependabot/nuget/analysis/analysis_json_reader.rb +0 -65
  62. data/lib/dependabot/nuget/analysis/dependency_analysis.rb +0 -66
  63. data/lib/dependabot/nuget/cache_manager.rb +0 -29
  64. data/lib/dependabot/nuget/discovery/dependency_details.rb +0 -102
  65. data/lib/dependabot/nuget/discovery/dependency_file_discovery.rb +0 -122
  66. data/lib/dependabot/nuget/discovery/discovery_json_reader.rb +0 -266
  67. data/lib/dependabot/nuget/discovery/evaluation_details.rb +0 -63
  68. data/lib/dependabot/nuget/discovery/project_discovery.rb +0 -104
  69. data/lib/dependabot/nuget/discovery/property_details.rb +0 -43
  70. data/lib/dependabot/nuget/discovery/workspace_discovery.rb +0 -61
  71. data/lib/dependabot/nuget/file_fetcher.rb +0 -46
  72. data/lib/dependabot/nuget/file_parser.rb +0 -153
  73. data/lib/dependabot/nuget/file_updater.rb +0 -256
  74. data/lib/dependabot/nuget/language.rb +0 -98
  75. data/lib/dependabot/nuget/metadata_finder.rb +0 -197
  76. data/lib/dependabot/nuget/native_helpers.rb +0 -364
  77. data/lib/dependabot/nuget/nuget_config_credential_helpers.rb +0 -88
  78. data/lib/dependabot/nuget/package_manager.rb +0 -51
  79. data/lib/dependabot/nuget/update_checker/requirements_updater.rb +0 -105
  80. data/lib/dependabot/nuget/update_checker.rb +0 -210
@@ -666,22 +666,12 @@ public class FileWriterWorkerTests : TestBase
666
666
  [Fact]
667
667
  public async Task EndToEnd_GlobalJson()
668
668
  {
669
- // project is unchanged but `global.json` is updated
669
+ // `global.json` is updated
670
670
  await TestAsync(
671
671
  dependencyName: "Some.MSBuild.Sdk",
672
672
  oldDependencyVersion: "1.0.0",
673
673
  newDependencyVersion: "1.1.0",
674
- projectContents: """
675
- <Project Sdk="Microsoft.NET.Sdk">
676
- <PropertyGroup>
677
- <TargetFramework>net9.0</TargetFramework>
678
- </PropertyGroup>
679
- <ItemGroup>
680
- <PackageReference Include="Some.Dependency" Version="1.0.0" />
681
- </ItemGroup>
682
- </Project>
683
- """,
684
- additionalFiles: [
674
+ files: [
685
675
  ("global.json", """
686
676
  {
687
677
  "sdk": {
@@ -702,17 +692,7 @@ public class FileWriterWorkerTests : TestBase
702
692
  discoveryWorker: null, // use real worker
703
693
  dependencySolver: null, // use real worker
704
694
  fileWriter: null, // use real worker
705
- expectedProjectContents: """
706
- <Project Sdk="Microsoft.NET.Sdk">
707
- <PropertyGroup>
708
- <TargetFramework>net9.0</TargetFramework>
709
- </PropertyGroup>
710
- <ItemGroup>
711
- <PackageReference Include="Some.Dependency" Version="1.0.0" />
712
- </ItemGroup>
713
- </Project>
714
- """,
715
- expectedAdditionalFiles: [
695
+ expectedFiles: [
716
696
  ("global.json", """
717
697
  {
718
698
  "sdk": {
@@ -871,11 +851,46 @@ public class FileWriterWorkerTests : TestBase
871
851
  ExperimentsManager? experimentsManager = null,
872
852
  Action<DirectoryInfo>? additionalChecks = null
873
853
  )
854
+ {
855
+ var files = new List<(string name, string contents)> { (projectName, projectContents) };
856
+ files.AddRange(additionalFiles);
857
+
858
+ var expectedFiles = new List<(string Path, string Contents)>() { (projectName, expectedProjectContents) };
859
+ expectedFiles.AddRange(expectedAdditionalFiles);
860
+
861
+ await TestAsync(
862
+ dependencyName,
863
+ oldDependencyVersion,
864
+ newDependencyVersion,
865
+ [.. files],
866
+ discoveryWorker,
867
+ dependencySolver,
868
+ fileWriter,
869
+ [.. expectedFiles],
870
+ expectedOperations,
871
+ packages,
872
+ experimentsManager,
873
+ additionalChecks
874
+ );
875
+ }
876
+
877
+ private static async Task TestAsync(
878
+ string dependencyName,
879
+ string oldDependencyVersion,
880
+ string newDependencyVersion,
881
+ (string name, string contents)[] files,
882
+ IDiscoveryWorker? discoveryWorker,
883
+ IDependencySolver? dependencySolver,
884
+ IFileWriter? fileWriter,
885
+ (string name, string contents)[] expectedFiles,
886
+ UpdateOperationBase[] expectedOperations,
887
+ MockNuGetPackage[]? packages = null,
888
+ ExperimentsManager? experimentsManager = null,
889
+ Action<DirectoryInfo>? additionalChecks = null
890
+ )
874
891
  {
875
892
  // arrange
876
- var allFiles = new List<(string Path, string Contents)>() { (projectName, projectContents) };
877
- allFiles.AddRange(additionalFiles);
878
- using var tempDir = await TemporaryDirectory.CreateWithContentsAsync([.. allFiles]);
893
+ using var tempDir = await TemporaryDirectory.CreateWithContentsAsync(files);
879
894
  await UpdateWorkerTestBase.MockNuGetPackagesInDirectory(packages, tempDir.DirectoryPath);
880
895
 
881
896
  var jobId = "TEST-JOB-ID";
@@ -883,8 +898,8 @@ public class FileWriterWorkerTests : TestBase
883
898
  experimentsManager ??= new ExperimentsManager();
884
899
  discoveryWorker ??= new DiscoveryWorker(jobId, experimentsManager, logger);
885
900
  var repoContentsPath = new DirectoryInfo(tempDir.DirectoryPath);
886
- var projectPath = new FileInfo(Path.Combine(tempDir.DirectoryPath, projectName));
887
- dependencySolver ??= new MSBuildDependencySolver(repoContentsPath, projectPath, experimentsManager, logger);
901
+ var projectPath = new FileInfo(Path.Combine(tempDir.DirectoryPath, files.First().name));
902
+ dependencySolver ??= new MSBuildDependencySolver(repoContentsPath, projectPath, logger);
888
903
  fileWriter ??= new XmlFileWriter(logger);
889
904
 
890
905
  var fileWriterWorker = new FileWriterWorker(discoveryWorker, dependencySolver, fileWriter, logger);
@@ -903,8 +918,6 @@ public class FileWriterWorkerTests : TestBase
903
918
  var expectedUpdateOperationsJson = expectedOperations.Select(o => JsonSerializer.Serialize(o, RunWorker.SerializerOptions)).ToArray();
904
919
  AssertEx.Equal(expectedUpdateOperationsJson, actualUpdateOperationsJson);
905
920
 
906
- var expectedFiles = new List<(string Path, string Contents)>() { (projectName, expectedProjectContents) };
907
- expectedFiles.AddRange(expectedAdditionalFiles);
908
921
  foreach (var (path, expectedContents) in expectedFiles)
909
922
  {
910
923
  var fullPath = Path.Join(tempDir.DirectoryPath, path);
@@ -1232,6 +1232,30 @@ public class XmlFileWriterTests : FileWriterTestsBase
1232
1232
  );
1233
1233
  }
1234
1234
 
1235
+ [Fact]
1236
+ public async Task SingleDependency_SingleFile_TransitiveIsPinnedInNewElement()
1237
+ {
1238
+ await TestAsync(
1239
+ files: [
1240
+ ("project.csproj", """
1241
+ <Project Sdk="Microsoft.NET.Sdk">
1242
+ </Project>
1243
+ """)
1244
+ ],
1245
+ initialProjectDependencyStrings: ["Transitive.Dependency/2.0.0"],
1246
+ requiredDependencyStrings: ["Transitive.Dependency/3.0.0"],
1247
+ expectedFiles: [
1248
+ ("project.csproj", """
1249
+ <Project Sdk="Microsoft.NET.Sdk">
1250
+ <ItemGroup>
1251
+ <PackageReference Include="Transitive.Dependency" Version="3.0.0" />
1252
+ </ItemGroup>
1253
+ </Project>
1254
+ """)
1255
+ ]
1256
+ );
1257
+ }
1258
+
1235
1259
  [Fact]
1236
1260
  public async Task SingleDependency_CentralPackageManagement_TransitiveIsPinned_ExistingPackageVersionElement_AlreadyCorrect()
1237
1261
  {
@@ -1491,7 +1515,9 @@ public class XmlFileWriterTests : FileWriterTestsBase
1491
1515
  <ItemGroup>
1492
1516
 
1493
1517
 
1494
- <PackageReference Include="Some.Dependency" Version="1.0.0" />
1518
+ <PackageReference
1519
+ Include="Some.Dependency"
1520
+ Version="1.0.0" UnrelatedAttribute="arrow->is->not->replaced" />
1495
1521
 
1496
1522
  </ItemGroup>
1497
1523
  </Project>
@@ -1506,7 +1532,9 @@ public class XmlFileWriterTests : FileWriterTestsBase
1506
1532
  <ItemGroup>
1507
1533
 
1508
1534
 
1509
- <PackageReference Include="Some.Dependency" Version="2.0.0" />
1535
+ <PackageReference
1536
+ Include="Some.Dependency"
1537
+ Version="2.0.0" UnrelatedAttribute="arrow->is->not->replaced" />
1510
1538
 
1511
1539
  </ItemGroup>
1512
1540
  </Project>
@@ -1515,6 +1543,51 @@ public class XmlFileWriterTests : FileWriterTestsBase
1515
1543
  );
1516
1544
  }
1517
1545
 
1546
+ [Fact]
1547
+ public async Task FormattingIsPreserved_WhenNoChangesAreMade()
1548
+ {
1549
+ await TestAsync(
1550
+ files: [
1551
+ ("project.csproj", """
1552
+ <Project Sdk="Microsoft.NET.Sdk">
1553
+ <ItemGroup>
1554
+ <PackageReference Include="Some.Dependency" Version="1.0.0" />
1555
+ </ItemGroup>
1556
+ </Project>
1557
+ """),
1558
+ ("UnrelatedFile.props", """
1559
+ <Project>
1560
+ <Target Name="MyTarget"
1561
+ BeforeTargets="SomeBeforeTargets"
1562
+ AfterTargets="SomeAfterTargets">
1563
+ <Message Text="no space before tag close->"/>
1564
+ </Target>
1565
+ </Project>
1566
+ """),
1567
+ ],
1568
+ initialProjectDependencyStrings: ["Some.Dependency/1.0.0"],
1569
+ requiredDependencyStrings: ["Some.Dependency/2.0.0"],
1570
+ expectedFiles: [
1571
+ ("project.csproj", """
1572
+ <Project Sdk="Microsoft.NET.Sdk">
1573
+ <ItemGroup>
1574
+ <PackageReference Include="Some.Dependency" Version="2.0.0" />
1575
+ </ItemGroup>
1576
+ </Project>
1577
+ """),
1578
+ ("UnrelatedFile.props", """
1579
+ <Project>
1580
+ <Target Name="MyTarget"
1581
+ BeforeTargets="SomeBeforeTargets"
1582
+ AfterTargets="SomeAfterTargets">
1583
+ <Message Text="no space before tag close->"/>
1584
+ </Target>
1585
+ </Project>
1586
+ """),
1587
+ ]
1588
+ );
1589
+ }
1590
+
1518
1591
  [Fact]
1519
1592
  public async Task FormattingIsPreserved_CommentsArePreserved_WhenInsertingAtFirstOfList()
1520
1593
  {
@@ -1535,8 +1608,8 @@ public class XmlFileWriterTests : FileWriterTestsBase
1535
1608
  ("project.csproj", """
1536
1609
  <Project Sdk="Microsoft.NET.Sdk">
1537
1610
  <ItemGroup>
1538
- <PackageReference Include="Some.Dependency" Version="2.0.0" />
1539
1611
  <!-- some comment -->
1612
+ <PackageReference Include="Some.Dependency" Version="2.0.0" />
1540
1613
  <PackageReference Include="Unrelated.Dependency" Version="3.0.0" />
1541
1614
  </ItemGroup>
1542
1615
  </Project>
@@ -24,7 +24,6 @@ public class PackageReferenceUpdaterTests
24
24
  // arrange
25
25
  using var repoRoot = await TemporaryDirectory.CreateWithContentsAsync(("project.csproj", "<Project Sdk=\"Microsoft.NET.Sdk\" />"));
26
26
  var projectPath = Path.Combine(repoRoot.DirectoryPath, "project.csproj");
27
- var experimentsManager = new ExperimentsManager();
28
27
  await UpdateWorkerTestBase.MockNuGetPackagesInDirectory([
29
28
  MockNuGetPackage.CreateSimplePackage("Parent.Package", "1.0.0", "net9.0", [(null, [("Transitive.Package", "1.0.0")])]),
30
29
  MockNuGetPackage.CreateSimplePackage("Parent.Package", "2.0.0", "net9.0", [(null, [("Transitive.Package", "2.0.0")])]),
@@ -43,7 +42,6 @@ public class PackageReferenceUpdaterTests
43
42
  topLevelDependencies,
44
43
  requestedUpdates,
45
44
  resolvedDependencies,
46
- experimentsManager,
47
45
  new TestLogger());
48
46
 
49
47
  // assert
@@ -12,10 +12,8 @@ using TestFile = (string Path, string Content);
12
12
 
13
13
  public class MSBuildHelperTests : TestBase
14
14
  {
15
- [Theory]
16
- [InlineData(true)]
17
- [InlineData(false)]
18
- public async Task AllPackageDependenciesCanBeTraversed(bool useExistingSdks)
15
+ [Fact]
16
+ public async Task AllPackageDependenciesCanBeTraversed()
19
17
  {
20
18
  using var temp = new TemporaryDirectory();
21
19
  MockNuGetPackage[] testPackages =
@@ -39,16 +37,13 @@ public class MSBuildHelperTests : TestBase
39
37
  temp.DirectoryPath,
40
38
  "netstandard2.0",
41
39
  [new Dependency("Package.A", "1.0.0", DependencyType.Unknown)],
42
- new ExperimentsManager() { InstallDotnetSdks = useExistingSdks },
43
40
  new TestLogger()
44
41
  );
45
42
  AssertEx.Equal(expectedDependencies, actualDependencies);
46
43
  }
47
44
 
48
- [Theory]
49
- [InlineData(true)]
50
- [InlineData(false)]
51
- public async Task AllPackageDependencies_DoNotTruncateLongDependencyLists(bool useExistingSdks)
45
+ [Fact]
46
+ public async Task AllPackageDependencies_DoNotTruncateLongDependencyLists()
52
47
  {
53
48
  using var temp = new TemporaryDirectory();
54
49
  MockNuGetPackage[] testPackages =
@@ -175,7 +170,6 @@ public class MSBuildHelperTests : TestBase
175
170
  temp.DirectoryPath,
176
171
  "net8.0",
177
172
  packages,
178
- new ExperimentsManager() { InstallDotnetSdks = useExistingSdks },
179
173
  new TestLogger()
180
174
  );
181
175
  for (int i = 0; i < actualDependencies.Length; i++)
@@ -188,10 +182,8 @@ public class MSBuildHelperTests : TestBase
188
182
  AssertEx.Equal(expectedDependencies, actualDependencies);
189
183
  }
190
184
 
191
- [Theory]
192
- [InlineData(true)]
193
- [InlineData(false)]
194
- public async Task AllPackageDependencies_DoNotIncludeUpdateOnlyPackages(bool useExistingSdks)
185
+ [Fact]
186
+ public async Task AllPackageDependencies_DoNotIncludeUpdateOnlyPackages()
195
187
  {
196
188
  using var temp = new TemporaryDirectory();
197
189
  MockNuGetPackage[] testPackages =
@@ -218,16 +210,13 @@ public class MSBuildHelperTests : TestBase
218
210
  temp.DirectoryPath,
219
211
  "net8.0",
220
212
  packages,
221
- new ExperimentsManager() { InstallDotnetSdks = useExistingSdks },
222
213
  new TestLogger()
223
214
  );
224
215
  AssertEx.Equal(expectedDependencies, actualDependencies);
225
216
  }
226
217
 
227
- [Theory]
228
- [InlineData(true)]
229
- [InlineData(false)]
230
- public async Task GetAllPackageDependencies_NugetConfigInvalid_DoesNotThrow(bool useExistingSdks)
218
+ [Fact]
219
+ public async Task GetAllPackageDependencies_NugetConfigInvalid_DoesNotThrow()
231
220
  {
232
221
  using var temp = new TemporaryDirectory();
233
222
 
@@ -249,15 +238,12 @@ public class MSBuildHelperTests : TestBase
249
238
  temp.DirectoryPath,
250
239
  "net8.0",
251
240
  [new Dependency("Some.Package", "4.5.11", DependencyType.Unknown)],
252
- new ExperimentsManager() { InstallDotnetSdks = useExistingSdks },
253
241
  new TestLogger()
254
242
  );
255
243
  }
256
244
 
257
- [Theory]
258
- [InlineData(true)]
259
- [InlineData(false)]
260
- public async Task LocalPackageSourcesAreHonored(bool useExistingSdks)
245
+ [Fact]
246
+ public async Task LocalPackageSourcesAreHonored()
261
247
  {
262
248
  using var temp = new TemporaryDirectory();
263
249
 
@@ -292,7 +278,6 @@ public class MSBuildHelperTests : TestBase
292
278
  temp.DirectoryPath,
293
279
  "net8.0",
294
280
  [new Dependency("Package.A", "1.0.0", DependencyType.Unknown)],
295
- new ExperimentsManager() { InstallDotnetSdks = useExistingSdks },
296
281
  new TestLogger()
297
282
  );
298
283
 
@@ -310,9 +295,8 @@ public class MSBuildHelperTests : TestBase
310
295
  ("project.csproj", projectContents)
311
296
  ]);
312
297
  var projectPath = Path.Combine(tempDir.DirectoryPath, "project.csproj");
313
- var experimentsManager = new ExperimentsManager();
314
298
  var logger = new TestLogger();
315
- var actualTfms = await MSBuildHelper.GetTargetFrameworkValuesFromProject(tempDir.DirectoryPath, projectPath, experimentsManager, logger);
299
+ var actualTfms = await MSBuildHelper.GetTargetFrameworkValuesFromProject(tempDir.DirectoryPath, projectPath, logger);
316
300
  AssertEx.Equal(expectedTfms, actualTfms);
317
301
  }
318
302
 
@@ -1,20 +1,12 @@
1
1
  # typed: strict
2
2
  # frozen_string_literal: true
3
3
 
4
- # These all need to be required so the various classes can be registered in a
5
- # lookup table of package manager names to concrete classes.
6
- require "dependabot/nuget/file_fetcher"
7
- require "dependabot/nuget/file_parser"
8
- require "dependabot/nuget/update_checker"
9
- require "dependabot/nuget/file_updater"
10
- require "dependabot/nuget/metadata_finder"
4
+ # These files are part of the Dependabot Core library, which provides
5
+ # functionality for managing dependencies across various ecosystems.
6
+ # This file specifically handles the NuGet package management system.
11
7
  require "dependabot/nuget/requirement"
12
8
  require "dependabot/nuget/version"
13
9
 
14
- require "dependabot/pull_request_creator/labeler"
15
- Dependabot::PullRequestCreator::Labeler
16
- .register_label_details("nuget", name: ".NET", colour: "7121c6")
17
-
18
10
  require "dependabot/dependency"
19
11
  Dependabot::Dependency.register_production_check(
20
12
  "nuget",
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dependabot-nuget
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.323.0
4
+ version: 0.325.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dependabot
@@ -15,34 +15,14 @@ dependencies:
15
15
  requirements:
16
16
  - - '='
17
17
  - !ruby/object:Gem::Version
18
- version: 0.323.0
18
+ version: 0.325.1
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.323.0
26
- - !ruby/object:Gem::Dependency
27
- name: rubyzip
28
- requirement: !ruby/object:Gem::Requirement
29
- requirements:
30
- - - ">="
31
- - !ruby/object:Gem::Version
32
- version: 2.3.2
33
- - - "<"
34
- - !ruby/object:Gem::Version
35
- version: '3.0'
36
- type: :runtime
37
- prerelease: false
38
- version_requirements: !ruby/object:Gem::Requirement
39
- requirements:
40
- - - ">="
41
- - !ruby/object:Gem::Version
42
- version: 2.3.2
43
- - - "<"
44
- - !ruby/object:Gem::Version
45
- version: '3.0'
25
+ version: 0.325.1
46
26
  - !ruby/object:Gem::Dependency
47
27
  name: debug
48
28
  requirement: !ruby/object:Gem::Requirement
@@ -203,14 +183,14 @@ dependencies:
203
183
  requirements:
204
184
  - - "~>"
205
185
  - !ruby/object:Gem::Version
206
- version: '2.2'
186
+ version: 2.2.5
207
187
  type: :development
208
188
  prerelease: false
209
189
  version_requirements: !ruby/object:Gem::Requirement
210
190
  requirements:
211
191
  - - "~>"
212
192
  - !ruby/object:Gem::Version
213
- version: '2.2'
193
+ version: 2.2.5
214
194
  - !ruby/object:Gem::Dependency
215
195
  name: vcr
216
196
  requirement: !ruby/object:Gem::Requirement
@@ -305,18 +285,10 @@ files:
305
285
  - helpers/lib/NuGetUpdater/NuGetProjects/NuGet.Resolver/NuGet.Resolver.csproj
306
286
  - helpers/lib/NuGetUpdater/NuGetProjects/NuGet.Versioning/NuGet.Versioning.csproj
307
287
  - helpers/lib/NuGetUpdater/NuGetProjects/README.md
308
- - helpers/lib/NuGetUpdater/NuGetUpdater.Cli.Test/EntryPointTests.Analyze.cs
309
- - helpers/lib/NuGetUpdater/NuGetUpdater.Cli.Test/EntryPointTests.Discover.cs
310
- - helpers/lib/NuGetUpdater/NuGetUpdater.Cli.Test/EntryPointTests.FrameworkCheck.cs
311
288
  - helpers/lib/NuGetUpdater/NuGetUpdater.Cli.Test/EntryPointTests.Run.cs
312
- - helpers/lib/NuGetUpdater/NuGetUpdater.Cli.Test/EntryPointTests.Update.cs
313
289
  - helpers/lib/NuGetUpdater/NuGetUpdater.Cli.Test/NuGetUpdater.Cli.Test.csproj
314
- - helpers/lib/NuGetUpdater/NuGetUpdater.Cli/Commands/AnalyzeCommand.cs
315
290
  - helpers/lib/NuGetUpdater/NuGetUpdater.Cli/Commands/CloneCommand.cs
316
- - helpers/lib/NuGetUpdater/NuGetUpdater.Cli/Commands/DiscoverCommand.cs
317
- - helpers/lib/NuGetUpdater/NuGetUpdater.Cli/Commands/FrameworkCheckCommand.cs
318
291
  - helpers/lib/NuGetUpdater/NuGetUpdater.Cli/Commands/RunCommand.cs
319
- - helpers/lib/NuGetUpdater/NuGetUpdater.Cli/Commands/UpdateCommand.cs
320
292
  - helpers/lib/NuGetUpdater/NuGetUpdater.Cli/NuGetUpdater.Cli.csproj
321
293
  - helpers/lib/NuGetUpdater/NuGetUpdater.Cli/Program.cs
322
294
  - helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Analyze/AnalyzeWorkerTestBase.cs
@@ -347,6 +319,7 @@ files:
347
319
  - helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/FrameworkChecker/SupportedFrameworkFacts.cs
348
320
  - helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/MockNuGetPackage.cs
349
321
  - helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/NuGetUpdater.Core.Test.csproj
322
+ - helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Run/ApiModel/CooldownTests.cs
350
323
  - helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Run/ApiModel/JobTests.cs
351
324
  - helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Run/EndToEndTests.cs
352
325
  - helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Run/HttpApiHandlerTests.cs
@@ -469,6 +442,7 @@ files:
469
442
  - helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/ApiModel/ClosePullRequest.cs
470
443
  - helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/ApiModel/CommitOptions.cs
471
444
  - helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/ApiModel/Condition.cs
445
+ - helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/ApiModel/Cooldown.cs
472
446
  - helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/ApiModel/CreatePullRequest.cs
473
447
  - helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/ApiModel/DependencyFile.cs
474
448
  - helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/ApiModel/DependencyFileNotFound.cs
@@ -570,34 +544,14 @@ files:
570
544
  - helpers/lib/NuGetUpdater/global.json
571
545
  - helpers/lib/NuGetUpdater/xunit.runner.json
572
546
  - lib/dependabot/nuget.rb
573
- - lib/dependabot/nuget/analysis/analysis_json_reader.rb
574
- - lib/dependabot/nuget/analysis/dependency_analysis.rb
575
- - lib/dependabot/nuget/cache_manager.rb
576
- - lib/dependabot/nuget/discovery/dependency_details.rb
577
- - lib/dependabot/nuget/discovery/dependency_file_discovery.rb
578
- - lib/dependabot/nuget/discovery/discovery_json_reader.rb
579
- - lib/dependabot/nuget/discovery/evaluation_details.rb
580
- - lib/dependabot/nuget/discovery/project_discovery.rb
581
- - lib/dependabot/nuget/discovery/property_details.rb
582
- - lib/dependabot/nuget/discovery/workspace_discovery.rb
583
- - lib/dependabot/nuget/file_fetcher.rb
584
- - lib/dependabot/nuget/file_parser.rb
585
- - lib/dependabot/nuget/file_updater.rb
586
- - lib/dependabot/nuget/language.rb
587
- - lib/dependabot/nuget/metadata_finder.rb
588
- - lib/dependabot/nuget/native_helpers.rb
589
- - lib/dependabot/nuget/nuget_config_credential_helpers.rb
590
- - lib/dependabot/nuget/package_manager.rb
591
547
  - lib/dependabot/nuget/requirement.rb
592
- - lib/dependabot/nuget/update_checker.rb
593
- - lib/dependabot/nuget/update_checker/requirements_updater.rb
594
548
  - lib/dependabot/nuget/version.rb
595
549
  homepage: https://github.com/dependabot/dependabot-core
596
550
  licenses:
597
551
  - MIT
598
552
  metadata:
599
553
  bug_tracker_uri: https://github.com/dependabot/dependabot-core/issues
600
- changelog_uri: https://github.com/dependabot/dependabot-core/releases/tag/v0.323.0
554
+ changelog_uri: https://github.com/dependabot/dependabot-core/releases/tag/v0.325.1
601
555
  rdoc_options: []
602
556
  require_paths:
603
557
  - lib
@@ -1,49 +0,0 @@
1
- using System.CommandLine;
2
-
3
- using NuGetUpdater.Core;
4
- using NuGetUpdater.Core.Analyze;
5
-
6
- namespace NuGetUpdater.Cli.Commands;
7
-
8
- internal static class AnalyzeCommand
9
- {
10
- internal static readonly Option<string> JobIdOption = new("--job-id") { Required = true };
11
- internal static readonly Option<FileInfo> JobPathOption = new("--job-path") { Required = true };
12
- internal static readonly Option<DirectoryInfo> RepoRootOption = new("--repo-root") { Required = true };
13
- internal static readonly Option<FileInfo> DependencyFilePathOption = new("--dependency-file-path") { Required = true };
14
- internal static readonly Option<FileInfo> DiscoveryFilePathOption = new("--discovery-file-path") { Required = true };
15
- internal static readonly Option<DirectoryInfo> AnalysisFolderOption = new("--analysis-folder-path") { Required = true };
16
-
17
- internal static Command GetCommand(Action<int> setExitCode)
18
- {
19
- Command command = new("analyze", "Determines how to update a dependency based on the workspace discovery information.")
20
- {
21
- JobIdOption,
22
- JobPathOption,
23
- RepoRootOption,
24
- DependencyFilePathOption,
25
- DiscoveryFilePathOption,
26
- AnalysisFolderOption
27
- };
28
-
29
- command.TreatUnmatchedTokensAsErrors = true;
30
-
31
- command.SetAction(async (parseResult, cancellationToken) =>
32
- {
33
- var jobId = parseResult.GetValue(JobIdOption);
34
- var jobPath = parseResult.GetValue(JobPathOption);
35
- var repoRoot = parseResult.GetValue(RepoRootOption);
36
- var discoveryPath = parseResult.GetValue(DiscoveryFilePathOption);
37
- var dependencyPath = parseResult.GetValue(DependencyFilePathOption);
38
- var analysisDirectory = parseResult.GetValue(AnalysisFolderOption);
39
-
40
- var logger = new OpenTelemetryLogger();
41
- var (experimentsManager, _errorResult) = await ExperimentsManager.FromJobFileAsync(jobId!, jobPath!.FullName);
42
- var worker = new AnalyzeWorker(jobId!, experimentsManager, logger);
43
- await worker.RunAsync(repoRoot!.FullName, discoveryPath!.FullName, dependencyPath!.FullName, analysisDirectory!.FullName);
44
- return 0;
45
- });
46
-
47
- return command;
48
- }
49
- }
@@ -1,60 +0,0 @@
1
- using System.CommandLine;
2
-
3
- using NuGetUpdater.Core;
4
- using NuGetUpdater.Core.Discover;
5
-
6
- namespace NuGetUpdater.Cli.Commands;
7
-
8
- internal static class DiscoverCommand
9
- {
10
- internal static readonly Option<string> JobIdOption = new("--job-id") { Required = true };
11
- internal static readonly Option<FileInfo> JobPathOption = new("--job-path") { Required = true };
12
- internal static readonly Option<DirectoryInfo> RepoRootOption = new("--repo-root") { Required = true };
13
- internal static readonly Option<string> WorkspaceOption = new("--workspace") { Required = true };
14
- internal static readonly Option<FileInfo> OutputOption = new("--output") { Required = true };
15
-
16
- internal static Command GetCommand(Action<int> setExitCode)
17
- {
18
- Command command = new("discover", "Generates a report of the workspace dependencies and where they are located.")
19
- {
20
- JobIdOption,
21
- JobPathOption,
22
- RepoRootOption,
23
- WorkspaceOption,
24
- OutputOption
25
- };
26
-
27
- command.TreatUnmatchedTokensAsErrors = true;
28
-
29
- command.SetAction(async (parseResult, cancellationToken) =>
30
- {
31
- var jobId = parseResult.GetValue(JobIdOption);
32
- var jobPath = parseResult.GetValue(JobPathOption);
33
- var repoRoot = parseResult.GetValue(RepoRootOption);
34
- var workspace = parseResult.GetValue(WorkspaceOption);
35
- var outputPath = parseResult.GetValue(OutputOption);
36
-
37
- var logger = new OpenTelemetryLogger();
38
- MSBuildHelper.RegisterMSBuild(repoRoot!.FullName, repoRoot.FullName, logger);
39
- var (experimentsManager, error) = await ExperimentsManager.FromJobFileAsync(jobId!, jobPath!.FullName);
40
- if (error is not null)
41
- {
42
- // to make testing easier, this should be a `WorkspaceDiscoveryResult` object
43
- var discoveryErrorResult = new WorkspaceDiscoveryResult
44
- {
45
- Error = error,
46
- Path = workspace!,
47
- Projects = [],
48
- };
49
- await DiscoveryWorker.WriteResultsAsync(repoRoot.FullName, outputPath!.FullName, discoveryErrorResult);
50
- return 0;
51
- }
52
-
53
- var worker = new DiscoveryWorker(jobId!, experimentsManager, logger);
54
- await worker.RunAsync(repoRoot.FullName, workspace!, outputPath!.FullName);
55
- return 0;
56
- });
57
-
58
- return command;
59
- }
60
- }
@@ -1,35 +0,0 @@
1
- using System.CommandLine;
2
-
3
- using NuGetUpdater.Core;
4
- using NuGetUpdater.Core.FrameworkChecker;
5
-
6
- namespace NuGetUpdater.Cli.Commands;
7
-
8
- internal static class FrameworkCheckCommand
9
- {
10
- internal static readonly Option<string[]> ProjectTfmsOption = new("--project-tfms") { Required = true, AllowMultipleArgumentsPerToken = true };
11
- internal static readonly Option<string[]> PackageTfmsOption = new("--package-tfms") { Required = true, AllowMultipleArgumentsPerToken = true };
12
-
13
- internal static Command GetCommand(Action<int> setExitCode)
14
- {
15
- Command command = new("framework-check", "Checks that a project's target frameworks are satisfied by the target frameworks supported by a package.")
16
- {
17
- ProjectTfmsOption,
18
- PackageTfmsOption
19
- };
20
-
21
- command.TreatUnmatchedTokensAsErrors = true;
22
-
23
- command.SetAction((parseResult) =>
24
- {
25
- var projectTfms = parseResult.GetValue(ProjectTfmsOption);
26
- var packageTfms = parseResult.GetValue(PackageTfmsOption);
27
-
28
- setExitCode(CompatibilityChecker.IsCompatible(projectTfms!, packageTfms!, new ConsoleLogger())
29
- ? 0
30
- : 1);
31
- });
32
-
33
- return command;
34
- }
35
- }