dependabot-nuget 0.291.0 → 0.293.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (94) hide show
  1. checksums.yaml +4 -4
  2. data/helpers/lib/NuGetUpdater/.editorconfig +1 -0
  3. data/helpers/lib/NuGetUpdater/.gitignore +1 -0
  4. data/helpers/lib/NuGetUpdater/Directory.Build.props +1 -0
  5. data/helpers/lib/NuGetUpdater/Directory.Packages.props +2 -1
  6. data/helpers/lib/NuGetUpdater/DotNetPackageCorrelation/Correlator.cs +197 -0
  7. data/helpers/lib/NuGetUpdater/DotNetPackageCorrelation/DotNetPackageCorrelation.csproj +12 -0
  8. data/helpers/lib/NuGetUpdater/DotNetPackageCorrelation/Model/PackageMapper.cs +68 -0
  9. data/helpers/lib/NuGetUpdater/DotNetPackageCorrelation/Model/PackageSet.cs +11 -0
  10. data/helpers/lib/NuGetUpdater/DotNetPackageCorrelation/Model/Release.cs +25 -0
  11. data/helpers/lib/NuGetUpdater/DotNetPackageCorrelation/Model/ReleasesFile.cs +9 -0
  12. data/helpers/lib/NuGetUpdater/DotNetPackageCorrelation/Model/RuntimePackages.cs +11 -0
  13. data/helpers/lib/NuGetUpdater/DotNetPackageCorrelation/Model/Sdk.cs +13 -0
  14. data/helpers/lib/NuGetUpdater/DotNetPackageCorrelation/Model/SemVerComparer.cs +16 -0
  15. data/helpers/lib/NuGetUpdater/DotNetPackageCorrelation/Model/SemVersionConverter.cs +42 -0
  16. data/helpers/lib/NuGetUpdater/DotNetPackageCorrelation.Cli/DotNetPackageCorrelation.Cli.csproj +16 -0
  17. data/helpers/lib/NuGetUpdater/DotNetPackageCorrelation.Cli/Program.cs +32 -0
  18. data/helpers/lib/NuGetUpdater/DotNetPackageCorrelation.Test/CorrelatorTests.cs +99 -0
  19. data/helpers/lib/NuGetUpdater/DotNetPackageCorrelation.Test/DotNetPackageCorrelation.Test.csproj +18 -0
  20. data/helpers/lib/NuGetUpdater/DotNetPackageCorrelation.Test/EndToEndTests.cs +30 -0
  21. data/helpers/lib/NuGetUpdater/DotNetPackageCorrelation.Test/RuntimePackagesTests.cs +206 -0
  22. data/helpers/lib/NuGetUpdater/NuGetUpdater.Cli/Commands/AnalyzeCommand.cs +6 -4
  23. data/helpers/lib/NuGetUpdater/NuGetUpdater.Cli/Commands/CloneCommand.cs +1 -1
  24. data/helpers/lib/NuGetUpdater/NuGetUpdater.Cli/Commands/DiscoverCommand.cs +19 -4
  25. data/helpers/lib/NuGetUpdater/NuGetUpdater.Cli/Commands/RunCommand.cs +5 -5
  26. data/helpers/lib/NuGetUpdater/NuGetUpdater.Cli/Commands/UpdateCommand.cs +17 -5
  27. data/helpers/lib/NuGetUpdater/NuGetUpdater.Cli.Test/EntryPointTests.Analyze.cs +8 -1
  28. data/helpers/lib/NuGetUpdater/NuGetUpdater.Cli.Test/EntryPointTests.Discover.cs +128 -4
  29. data/helpers/lib/NuGetUpdater/NuGetUpdater.Cli.Test/EntryPointTests.Update.cs +8 -0
  30. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Analyze/AnalyzeWorker.cs +9 -7
  31. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Analyze/DependencyFinder.cs +4 -4
  32. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Analyze/Extensions.cs +1 -1
  33. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Analyze/RequirementConverter.cs +19 -1
  34. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/BadRequirementException.cs +9 -0
  35. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Clone/CloneWorker.cs +40 -8
  36. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/DependencyDiscovery.targets +2 -2
  37. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Discover/DiscoveryWorker.cs +65 -23
  38. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Discover/ProjectDiscoveryResult.cs +3 -3
  39. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Discover/SdkProjectDiscovery.cs +99 -2
  40. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/EnsureDotNetPackageCorrelation.targets +25 -0
  41. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/ExperimentsManager.cs +15 -5
  42. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Files/PackagesConfigBuildFile.cs +5 -1
  43. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/MissingFileException.cs +2 -1
  44. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/NativeResult.cs +3 -3
  45. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/NuGetUpdater.Core.csproj +4 -0
  46. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/ApiModel/BadRequirement.cs +10 -0
  47. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/ApiModel/CommitOptions.cs +1 -1
  48. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/ApiModel/DependencyFileNotFound.cs +7 -2
  49. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/ApiModel/DependencyFileNotParseable.cs +15 -0
  50. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/ApiModel/JobErrorBase.cs +25 -2
  51. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/ApiModel/JobRepoNotFound.cs +1 -4
  52. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/ApiModel/PrivateSourceAuthenticationFailure.cs +1 -1
  53. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/ApiModel/UnknownError.cs +6 -2
  54. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/ApiModel/UpdateNotPossible.cs +1 -1
  55. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/RunWorker.cs +9 -18
  56. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/UnparseableFileException.cs +12 -0
  57. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Updater/LockFileUpdater.cs +1 -1
  58. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Updater/PackageReferenceUpdater.cs +21 -0
  59. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Updater/UpdaterWorker.cs +6 -30
  60. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Updater/WebApplicationTargetsConditionPatcher.cs +12 -1
  61. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Utilities/DependencyConflictResolver.cs +0 -7
  62. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Utilities/DotNetPackageCorrelationManager.cs +46 -0
  63. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Utilities/MSBuildHelper.cs +59 -30
  64. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Utilities/NuGetHelper.cs +1 -1
  65. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Utilities/ProjectHelper.cs +4 -4
  66. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Analyze/AnalyzeWorkerTestBase.cs +15 -4
  67. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Analyze/AnalyzeWorkerTests.cs +15 -9
  68. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Clone/CloneWorkerTests.cs +60 -2
  69. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Discover/DiscoveryWorkerTestBase.cs +20 -3
  70. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Discover/DiscoveryWorkerTests.PackagesConfig.cs +56 -0
  71. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Discover/DiscoveryWorkerTests.Project.cs +108 -0
  72. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Discover/DiscoveryWorkerTests.cs +16 -12
  73. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Discover/ExpectedDiscoveryResults.cs +1 -0
  74. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/MockNuGetPackage.cs +15 -28
  75. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Run/RunWorkerTests.cs +5 -4
  76. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Run/SerializationTests.cs +84 -40
  77. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/TestBase.cs +24 -0
  78. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Update/ExpectedUpdateOperationResult.cs +1 -1
  79. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Update/UpdateWorkerTestBase.cs +25 -11
  80. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Update/UpdateWorkerTests.DirsProj.cs +1 -1
  81. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Update/UpdateWorkerTests.GlobalJson.cs +2 -2
  82. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Update/UpdateWorkerTests.LockFile.cs +251 -0
  83. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Update/UpdateWorkerTests.Mixed.cs +14 -8
  84. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Update/UpdateWorkerTests.PackageReference.cs +154 -9
  85. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Update/UpdateWorkerTests.PackagesConfig.cs +71 -15
  86. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Utilities/MSBuildHelperTests.cs +38 -20
  87. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Utilities/ProjectHelperTests.cs +65 -0
  88. data/helpers/lib/NuGetUpdater/NuGetUpdater.sln +18 -1
  89. data/helpers/lib/NuGetUpdater/global.json +1 -1
  90. data/lib/dependabot/nuget/language.rb +21 -5
  91. data/lib/dependabot/nuget/native_helpers.rb +41 -14
  92. data/lib/dependabot/nuget/package_manager.rb +4 -4
  93. metadata +30 -7
  94. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/ErrorType.cs +0 -11
@@ -2,6 +2,7 @@ using System.Linq;
2
2
  using System.Text;
3
3
  using System.Text.Json;
4
4
 
5
+ using NuGetUpdater.Core.Run.ApiModel;
5
6
  using NuGetUpdater.Core.Updater;
6
7
 
7
8
  using Xunit;
@@ -495,7 +496,7 @@ public partial class UpdateWorkerTests
495
496
  MockNuGetPackage.CreateSimplePackage("Some.Package", "13.0.1", "net8.0"),
496
497
  ],
497
498
  projectContents: $"""
498
- <Project Sdk="Microsoft.NET.Sdk">">
499
+ <Project Sdk="Microsoft.NET.Sdk">
499
500
  <PropertyGroup>
500
501
  <TargetFramework>net8.0</TargetFramework>
501
502
  <SomePackageVersion>9.0.1</SomePackageVersion>
@@ -571,7 +572,7 @@ public partial class UpdateWorkerTests
571
572
  //
572
573
  // do the update
573
574
  //
574
- UpdaterWorker worker = new(new ExperimentsManager(), new TestLogger());
575
+ UpdaterWorker worker = new("TEST-JOB-ID", new ExperimentsManager(), new TestLogger());
575
576
  await worker.RunAsync(tempDirectory.DirectoryPath, projectPath, "Some.Package", "1.0.0", "1.1.0", isTransitive: false);
576
577
 
577
578
  //
@@ -3075,14 +3076,14 @@ public partial class UpdateWorkerTests
3075
3076
  public async Task UpdatingTransitiveDependencyWithNewSolverCanUpdateJustTheTopLevelPackage()
3076
3077
  {
3077
3078
  // we've been asked to explicitly update a transitive dependency, but we can solve it by updating the top-level package instead
3078
- await TestUpdateForProject("Transitive.Package", "1.0.0", "2.0.0",
3079
+ await TestUpdateForProject("Transitive.Package", "7.0.0", "8.0.0",
3079
3080
  isTransitive: true,
3080
3081
  packages:
3081
3082
  [
3082
- MockNuGetPackage.CreateSimplePackage("Some.Package", "1.0.0", "net8.0", [("net8.0", [("Transitive.Package", "[1.0.0]")])]),
3083
- MockNuGetPackage.CreateSimplePackage("Some.Package", "2.0.0", "net8.0", [("net8.0", [("Transitive.Package", "[2.0.0]")])]),
3084
- MockNuGetPackage.CreateSimplePackage("Transitive.Package", "1.0.0", "net8.0"),
3085
- MockNuGetPackage.CreateSimplePackage("Transitive.Package", "2.0.0", "net8.0"),
3083
+ MockNuGetPackage.CreateSimplePackage("Some.Package", "1.0.0", "net8.0", [("net8.0", [("Transitive.Package", "[7.0.0]")])]),
3084
+ MockNuGetPackage.CreateSimplePackage("Some.Package", "2.0.0", "net8.0", [("net8.0", [("Transitive.Package", "[8.0.0]")])]),
3085
+ MockNuGetPackage.CreateSimplePackage("Transitive.Package", "7.0.0", "net8.0"),
3086
+ MockNuGetPackage.CreateSimplePackage("Transitive.Package", "8.0.0", "net8.0"),
3086
3087
  ],
3087
3088
  projectContents: """
3088
3089
  <Project Sdk="Microsoft.NET.Sdk">
@@ -3482,10 +3483,154 @@ public partial class UpdateWorkerTests
3482
3483
  """,
3483
3484
  expectedResult: new()
3484
3485
  {
3485
- ErrorType = ErrorType.AuthenticationFailure,
3486
- ErrorDetails = $"({http.BaseUrl.TrimEnd('/')}/index.json)",
3486
+ Error = new PrivateSourceAuthenticationFailure([$"{http.BaseUrl.TrimEnd('/')}/index.json"]),
3487
3487
  }
3488
3488
  );
3489
3489
  }
3490
+
3491
+ [Fact]
3492
+ public async Task UpdateSdkManagedPackage_DirectDependency()
3493
+ {
3494
+ // To avoid a unit test that's tightly coupled to the installed SDK, several values are simulated,
3495
+ // including the runtime major version, the current Microsoft.NETCore.App.Ref package, and the package
3496
+ // correlation file. Doing this requires a temporary file and environment variable override.
3497
+ var runtimeMajorVersion = Environment.Version.Major;
3498
+ var netCoreAppRefPackage = MockNuGetPackage.GetMicrosoftNETCoreAppRefPackage(runtimeMajorVersion);
3499
+ using var tempDirectory = new TemporaryDirectory();
3500
+ var packageCorrelationFile = Path.Combine(tempDirectory.DirectoryPath, "dotnet-package-correlation.json");
3501
+ await File.WriteAllTextAsync(packageCorrelationFile, $$"""
3502
+ {
3503
+ "Runtimes": {
3504
+ "{{runtimeMajorVersion}}.0.0": {
3505
+ "Packages": {
3506
+ "{{netCoreAppRefPackage.Id}}": "{{netCoreAppRefPackage.Version}}",
3507
+ "System.Text.Json": "{{runtimeMajorVersion}}.0.98"
3508
+ }
3509
+ }
3510
+ }
3511
+ }
3512
+ """);
3513
+ using var tempEnvironment = new TemporaryEnvironment([("DOTNET_PACKAGE_CORRELATION_FILE_PATH", packageCorrelationFile)]);
3514
+
3515
+ // In the `packages` section below, we fake a `System.Text.Json` package with a low assembly version that
3516
+ // will always trigger the replacement so that can be detected and then the equivalent version is pulled
3517
+ // from the correlation file specified above. In the original project contents, package version `x.0.98`
3518
+ // is reported which makes the update to `x.0.99` always possible.
3519
+ await TestUpdateForProject("System.Text.Json", $"{runtimeMajorVersion}.0.98", $"{runtimeMajorVersion}.0.99",
3520
+ experimentsManager: new ExperimentsManager() { UseDirectDiscovery = true, InstallDotnetSdks = true },
3521
+ packages:
3522
+ [
3523
+ // this assembly version is lower than what the SDK will have
3524
+ MockNuGetPackage.CreatePackageWithAssembly("System.Text.Json", $"{runtimeMajorVersion}.0.0", $"net{runtimeMajorVersion}.0", assemblyVersion: $"{runtimeMajorVersion}.0.0.0"),
3525
+ // this assembly version is greater than what the SDK will have
3526
+ MockNuGetPackage.CreatePackageWithAssembly("System.Text.Json", $"{runtimeMajorVersion}.0.99", $"net{runtimeMajorVersion}.0", assemblyVersion: $"{runtimeMajorVersion}.99.99.99"),
3527
+ ],
3528
+ projectContents: $"""
3529
+ <Project Sdk="Microsoft.NET.Sdk">
3530
+ <PropertyGroup>
3531
+ <TargetFramework>net{runtimeMajorVersion}.0</TargetFramework>
3532
+ </PropertyGroup>
3533
+ <ItemGroup>
3534
+ <PackageReference Include="System.Text.Json" Version="{runtimeMajorVersion}.0.0" />
3535
+ </ItemGroup>
3536
+ </Project>
3537
+ """,
3538
+ additionalFiles: [
3539
+ ("global.json", $$"""
3540
+ {
3541
+ "sdk": {
3542
+ "version": "{{runtimeMajorVersion}}.0.100",
3543
+ "allowPrerelease": true,
3544
+ "rollForward": "latestMinor"
3545
+ }
3546
+ }
3547
+ """)
3548
+ ],
3549
+ expectedProjectContents: $"""
3550
+ <Project Sdk="Microsoft.NET.Sdk">
3551
+ <PropertyGroup>
3552
+ <TargetFramework>net{runtimeMajorVersion}.0</TargetFramework>
3553
+ </PropertyGroup>
3554
+ <ItemGroup>
3555
+ <PackageReference Include="System.Text.Json" Version="{runtimeMajorVersion}.0.99" />
3556
+ </ItemGroup>
3557
+ </Project>
3558
+ """
3559
+ );
3560
+ }
3561
+
3562
+ [Fact]
3563
+ public async Task UpdateSdkManagedPackage_TransitiveDependency()
3564
+ {
3565
+ // To avoid a unit test that's tightly coupled to the installed SDK, several values are simulated,
3566
+ // including the runtime major version, the current Microsoft.NETCore.App.Ref package, and the package
3567
+ // correlation file. Doing this requires a temporary file and environment variable override.
3568
+ var runtimeMajorVersion = Environment.Version.Major;
3569
+ var netCoreAppRefPackage = MockNuGetPackage.GetMicrosoftNETCoreAppRefPackage(runtimeMajorVersion);
3570
+ using var tempDirectory = new TemporaryDirectory();
3571
+ var packageCorrelationFile = Path.Combine(tempDirectory.DirectoryPath, "dotnet-package-correlation.json");
3572
+ await File.WriteAllTextAsync(packageCorrelationFile, $$"""
3573
+ {
3574
+ "Runtimes": {
3575
+ "{{runtimeMajorVersion}}.0.0": {
3576
+ "Packages": {
3577
+ "{{netCoreAppRefPackage.Id}}": "{{netCoreAppRefPackage.Version}}",
3578
+ "System.Text.Json": "{{runtimeMajorVersion}}.0.98"
3579
+ }
3580
+ }
3581
+ }
3582
+ }
3583
+ """);
3584
+ using var tempEnvironment = new TemporaryEnvironment([("DOTNET_PACKAGE_CORRELATION_FILE_PATH", packageCorrelationFile)]);
3585
+
3586
+ // In the `packages` section below, we fake a `System.Text.Json` package with a low assembly version that
3587
+ // will always trigger the replacement so that can be detected and then the equivalent version is pulled
3588
+ // from the correlation file specified above. In the original project contents, package version `x.0.98`
3589
+ // is reported which makes the update to `x.0.99` always possible.
3590
+ await TestUpdateForProject("System.Text.Json", $"{runtimeMajorVersion}.0.98", $"{runtimeMajorVersion}.0.99",
3591
+ isTransitive: true,
3592
+ experimentsManager: new ExperimentsManager() { UseDirectDiscovery = true, InstallDotnetSdks = true },
3593
+ packages:
3594
+ [
3595
+ MockNuGetPackage.CreateSimplePackage("Some.Package", "1.0.0", $"net{runtimeMajorVersion}.0", [(null, [("System.Text.Json", $"[{runtimeMajorVersion}.0.0]")])]),
3596
+ MockNuGetPackage.CreateSimplePackage("Some.Package", "2.0.0", $"net{runtimeMajorVersion}.0", [(null, [("System.Text.Json", $"[{runtimeMajorVersion}.0.99]")])]),
3597
+ // this assembly version is lower than what the SDK will have
3598
+ MockNuGetPackage.CreatePackageWithAssembly("System.Text.Json", $"{runtimeMajorVersion}.0.0", $"net{runtimeMajorVersion}.0", assemblyVersion: $"{runtimeMajorVersion}.0.0.0"),
3599
+ // this assembly version is greater than what the SDK will have
3600
+ MockNuGetPackage.CreatePackageWithAssembly("System.Text.Json", $"{runtimeMajorVersion}.0.99", $"net{runtimeMajorVersion}.0", assemblyVersion: $"{runtimeMajorVersion}.99.99.99"),
3601
+ ],
3602
+ projectContents: $"""
3603
+ <Project Sdk="Microsoft.NET.Sdk">
3604
+ <PropertyGroup>
3605
+ <TargetFramework>net{runtimeMajorVersion}.0</TargetFramework>
3606
+ </PropertyGroup>
3607
+ <ItemGroup>
3608
+ <PackageReference Include="Some.Package" Version="1.0.0" />
3609
+ </ItemGroup>
3610
+ </Project>
3611
+ """,
3612
+ additionalFiles: [
3613
+ ("global.json", $$"""
3614
+ {
3615
+ "sdk": {
3616
+ "version": "{{runtimeMajorVersion}}.0.100",
3617
+ "allowPrerelease": true,
3618
+ "rollForward": "latestMinor"
3619
+ }
3620
+ }
3621
+ """)
3622
+ ],
3623
+ expectedProjectContents: $"""
3624
+ <Project Sdk="Microsoft.NET.Sdk">
3625
+ <PropertyGroup>
3626
+ <TargetFramework>net{runtimeMajorVersion}.0</TargetFramework>
3627
+ </PropertyGroup>
3628
+ <ItemGroup>
3629
+ <PackageReference Include="Some.Package" Version="2.0.0" />
3630
+ </ItemGroup>
3631
+ </Project>
3632
+ """
3633
+ );
3634
+ }
3490
3635
  }
3491
3636
  }
@@ -4,6 +4,7 @@ using System.Text.Json;
4
4
 
5
5
  using NuGet;
6
6
 
7
+ using NuGetUpdater.Core.Run.ApiModel;
7
8
  using NuGetUpdater.Core.Test.Updater;
8
9
  using NuGetUpdater.Core.Updater;
9
10
 
@@ -1969,7 +1970,7 @@ public partial class UpdateWorkerTests
1969
1970
  <VSToolsPath Condition="'$(VSToolsPath)' == ''">C:\some\path\that\does\not\exist</VSToolsPath>
1970
1971
  </PropertyGroup>
1971
1972
  <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
1972
- <Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" />
1973
+ <Import Project="$(VSToolsPath)\SomeSubPath\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" />
1973
1974
  <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
1974
1975
  Other similar extension points exist, see Microsoft.Common.targets.
1975
1976
  <Target Name="BeforeBuild">
@@ -2050,7 +2051,7 @@ public partial class UpdateWorkerTests
2050
2051
  <VSToolsPath Condition="'$(VSToolsPath)' == ''">C:\some\path\that\does\not\exist</VSToolsPath>
2051
2052
  </PropertyGroup>
2052
2053
  <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
2053
- <Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" />
2054
+ <Import Project="$(VSToolsPath)\SomeSubPath\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" />
2054
2055
  <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
2055
2056
  Other similar extension points exist, see Microsoft.Common.targets.
2056
2057
  <Target Name="BeforeBuild">
@@ -2282,25 +2283,83 @@ public partial class UpdateWorkerTests
2282
2283
  await MockNuGetPackagesInDirectory(packages, Path.Combine(temporaryDirectory.DirectoryPath, "packages"));
2283
2284
  var resultOutputPath = Path.Combine(temporaryDirectory.DirectoryPath, "result.json");
2284
2285
 
2285
- var worker = new UpdaterWorker(new ExperimentsManager(), new TestLogger());
2286
+ var worker = new UpdaterWorker("TEST-JOB-ID", new ExperimentsManager(), new TestLogger());
2286
2287
  await worker.RunAsync(temporaryDirectory.DirectoryPath, "project.csproj", "Some.Package", "1.0.0", "1.1.0", isTransitive: false, resultOutputPath: resultOutputPath);
2287
2288
 
2288
2289
  var resultContents = await File.ReadAllTextAsync(resultOutputPath);
2289
- var result = JsonSerializer.Deserialize<UpdateOperationResult>(resultContents, UpdaterWorker.SerializerOptions)!;
2290
- Assert.Equal(ErrorType.MissingFile, result.ErrorType);
2291
- Assert.Equal(Path.Combine(temporaryDirectory.DirectoryPath, "this.file.does.not.exist.targets"), result.ErrorDetails!.ToString());
2290
+ var rawResult = JsonDocument.Parse(resultContents);
2291
+ Assert.Equal("dependency_file_not_found", rawResult.RootElement.GetProperty("Error").GetProperty("error-type").GetString());
2292
+ Assert.Equal(Path.Combine(temporaryDirectory.DirectoryPath, "this.file.does.not.exist.targets").NormalizePathToUnix(), rawResult.RootElement.GetProperty("Error").GetProperty("error-details").GetProperty("file-path").GetString());
2292
2293
  }
2293
2294
 
2294
2295
  [Fact]
2295
- public async Task ReportsPrivateSourceAuthenticationFailure()
2296
+ public async Task MissingVisualStudioComponentTargetsAreReportedAsMissingFiles()
2296
2297
  {
2297
- static (int, string) TestHttpHandler(string uriString)
2298
+ using var temporaryDirectory = await TemporaryDirectory.CreateWithContentsAsync(
2299
+ [
2300
+ ("project.csproj", """
2301
+ <Project ToolsVersion="15.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
2302
+ <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
2303
+ <Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\Some.Visual.Studio.Component.props" />
2304
+ <PropertyGroup>
2305
+ <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
2306
+ </PropertyGroup>
2307
+ <ItemGroup>
2308
+ <None Include="packages.config" />
2309
+ </ItemGroup>
2310
+ <ItemGroup>
2311
+ <Reference Include="Some.Package, Version=1.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed">
2312
+ <HintPath>packages\Some.Package.1.0.0\lib\net45\Some.Package.dll</HintPath>
2313
+ <Private>True</Private>
2314
+ </Reference>
2315
+ </ItemGroup>
2316
+ <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
2317
+ </Project>
2318
+ """),
2319
+ ("packages.config", """
2320
+ <packages>
2321
+ <package id="Some.Package" version="1.0.0" targetFramework="net45" />
2322
+ </packages>
2323
+ """),
2324
+ ("NuGet.Config", """
2325
+ <configuration>
2326
+ <packageSources>
2327
+ <clear />
2328
+ <add key="private_feed" value="packages" />
2329
+ </packageSources>
2330
+ </configuration>
2331
+ """)
2332
+ ]
2333
+ );
2334
+ MockNuGetPackage[] packages =
2335
+ [
2336
+ MockNuGetPackage.CreateSimplePackage("Some.Package", "1.0.0", "net45"),
2337
+ MockNuGetPackage.CreateSimplePackage("Some.Package", "1.1.0", "net45"),
2338
+ ];
2339
+ await MockNuGetPackagesInDirectory(packages, Path.Combine(temporaryDirectory.DirectoryPath, "packages"));
2340
+ var resultOutputPath = Path.Combine(temporaryDirectory.DirectoryPath, "result.json");
2341
+
2342
+ var worker = new UpdaterWorker("TEST-JOB-ID", new ExperimentsManager(), new TestLogger());
2343
+ await worker.RunAsync(temporaryDirectory.DirectoryPath, "project.csproj", "Some.Package", "1.0.0", "1.1.0", isTransitive: false, resultOutputPath: resultOutputPath);
2344
+
2345
+ var resultContents = await File.ReadAllTextAsync(resultOutputPath);
2346
+ var rawResult = JsonDocument.Parse(resultContents);
2347
+ Assert.Equal("dependency_file_not_found", rawResult.RootElement.GetProperty("Error").GetProperty("error-type").GetString());
2348
+ Assert.Equal("$(MSBuildExtensionsPath32)/Microsoft/VisualStudio/v$(VisualStudioVersion)/Some.Visual.Studio.Component.props", rawResult.RootElement.GetProperty("Error").GetProperty("error-details").GetProperty("file-path").GetString());
2349
+ }
2350
+
2351
+ [Theory]
2352
+ [InlineData(401)]
2353
+ [InlineData(403)]
2354
+ public async Task ReportsPrivateSourceAuthenticationFailure(int httpStatusCode)
2355
+ {
2356
+ (int, string) TestHttpHandler(string uriString)
2298
2357
  {
2299
2358
  var uri = new Uri(uriString, UriKind.Absolute);
2300
2359
  var baseUrl = $"{uri.Scheme}://{uri.Host}:{uri.Port}";
2301
2360
  return uri.PathAndQuery switch
2302
2361
  {
2303
- _ => (401, "{}"), // everything is unauthorized
2362
+ _ => (httpStatusCode, "{}"), // everything is unauthorized
2304
2363
  };
2305
2364
  }
2306
2365
  using var http = TestHttpServer.CreateTestStringServer(TestHttpHandler);
@@ -2366,8 +2425,7 @@ public partial class UpdateWorkerTests
2366
2425
  """,
2367
2426
  expectedResult: new()
2368
2427
  {
2369
- ErrorType = ErrorType.AuthenticationFailure,
2370
- ErrorDetails = $"({http.BaseUrl.TrimEnd('/')}/index.json)",
2428
+ Error = new PrivateSourceAuthenticationFailure([$"{http.BaseUrl.TrimEnd('/')}/index.json"]),
2371
2429
  }
2372
2430
  );
2373
2431
  }
@@ -2497,8 +2555,7 @@ public partial class UpdateWorkerTests
2497
2555
  """,
2498
2556
  expectedResult: new()
2499
2557
  {
2500
- ErrorType = ErrorType.Unknown,
2501
- ErrorDetailsRegex = "Response status code does not indicate success",
2558
+ ErrorRegex = "Response status code does not indicate success",
2502
2559
  }
2503
2560
  );
2504
2561
  }
@@ -2575,8 +2632,7 @@ public partial class UpdateWorkerTests
2575
2632
  """,
2576
2633
  expectedResult: new()
2577
2634
  {
2578
- ErrorType = ErrorType.UpdateNotPossible,
2579
- ErrorDetails = new[] { "Unrelated.Package.1.0.0" },
2635
+ Error = new UpdateNotPossible(["Unrelated.Package.1.0.0"]),
2580
2636
  }
2581
2637
  );
2582
2638
  }
@@ -854,30 +854,45 @@ public class MSBuildHelperTests : TestBase
854
854
 
855
855
  // Two top level packages (Buildalyzer), (Microsoft.CodeAnalysis.CSharp.Scripting) that share a dependency (Microsoft.CodeAnalysis.Csharp)
856
856
  // Updating ONE of the top level packages, which updates the dependencies and their other "parents"
857
- // First family: Buildalyzer 7.0.1 requires Microsoft.CodeAnalysis.CSharp to be >= 4.0.0 and Microsoft.CodeAnalysis.Common to be 4.0.0 (@ 6.0.4, Microsoft.CodeAnalysis.Common isn't a dependency of buildalyzer)
858
- // Second family: Microsoft.CodeAnalysis.CSharp.Scripting 4.0.0 requires Microsoft.CodeAnalysis.CSharp 4.0.0 and Microsoft.CodeAnalysis.Common to be 4.0.0 (Specific version)
857
+ // First family: Buildalyzer 7.0.1 requires Microsoft.CodeAnalysis.CSharp to be = 4.0.1 and Microsoft.CodeAnalysis.Common to be 4.0.1 (@ 6.0.4, Microsoft.CodeAnalysis.Common isn't a dependency of buildalyzer)
858
+ // Second family: Microsoft.CodeAnalysis.CSharp.Scripting 4.0.1 requires Microsoft.CodeAnalysis.CSharp 4.0.1 and Microsoft.CodeAnalysis.Common to be 4.0.1 (Specific version)
859
859
  // Updating Buildalyzer to 7.0.1 will update its transitive dependency (Microsoft.CodeAnalysis.Common) and then its transitive dependency's "family"
860
- [Theory]
861
- [InlineData(true)]
862
- [InlineData(false)]
863
- public async Task DependencyConflictsCanBeResolvedNewSharingDependency(bool useExistingSdks)
860
+ [Fact]
861
+ public async Task DependencyConflictsCanBeResolvedNewSharingDependency()
864
862
  {
863
+ // arrange
865
864
  using var tempDirectory = new TemporaryDirectory();
866
865
  var projectPath = Path.Join(tempDirectory.DirectoryPath, "project.csproj");
867
866
  await File.WriteAllTextAsync(projectPath, """
868
867
  <Project Sdk="Microsoft.NET.Sdk">
869
- <PropertyGroup>
868
+ <PropertyGroup>
870
869
  <TargetFramework>net8.0</TargetFramework>
871
- </PropertyGroup>
872
- <ItemGroup>
870
+ </PropertyGroup>
871
+ <ItemGroup>
873
872
  <PackageReference Include="Buildalyzer" Version="6.0.4" />
874
873
  <PackageReference Include="Microsoft.CodeAnalysis.Csharp.Scripting" Version="3.10.0" />
875
874
  <PackageReference Include="Microsoft.CodeAnalysis.CSharp" Version="3.10.0" />
876
875
  <PackageReference Include="Microsoft.CodeAnalysis.Common" Version="3.10.0" />
877
- </ItemGroup>
876
+ </ItemGroup>
878
877
  </Project>
879
878
  """);
880
879
 
880
+ var testPackages = new MockNuGetPackage[]
881
+ {
882
+ MockNuGetPackage.CreateSimplePackage("Buildalyzer", "6.0.4", "net8.0", [(null, [("Microsoft.CodeAnalysis.CSharp", "[3.10.0]")])]),
883
+ MockNuGetPackage.CreateSimplePackage("Buildalyzer", "7.0.1", "net8.0", [(null, [("Microsoft.CodeAnalysis.CSharp", "[4.0.1]")])]),
884
+
885
+ MockNuGetPackage.CreateSimplePackage("Microsoft.CodeAnalysis.CSharp.Scripting", "3.10.0", "net8.0", [(null, [("Microsoft.CodeAnalysis.CSharp", "[3.10.0]")])]),
886
+ MockNuGetPackage.CreateSimplePackage("Microsoft.CodeAnalysis.CSharp.Scripting", "4.0.1", "net8.0", [(null, [("Microsoft.CodeAnalysis.CSharp", "[4.0.1]")])]),
887
+
888
+ MockNuGetPackage.CreateSimplePackage("Microsoft.CodeAnalysis.CSharp", "3.10.0", "net8.0", [(null, [("Microsoft.CodeAnalysis.Common", "[3.10.0]")])]),
889
+ MockNuGetPackage.CreateSimplePackage("Microsoft.CodeAnalysis.CSharp", "4.0.1", "net8.0", [(null, [("Microsoft.CodeAnalysis.Common", "[4.0.1]")])]),
890
+
891
+ MockNuGetPackage.CreateSimplePackage("Microsoft.CodeAnalysis.Common", "3.10.0", "net8.0"),
892
+ MockNuGetPackage.CreateSimplePackage("Microsoft.CodeAnalysis.Common", "4.0.1", "net8.0"),
893
+ };
894
+ await UpdateWorkerTestBase.MockNuGetPackagesInDirectory(testPackages, tempDirectory.DirectoryPath);
895
+
881
896
  var dependencies = new[]
882
897
  {
883
898
  new Dependency("Buildalyzer", "6.0.4", DependencyType.PackageReference),
@@ -890,25 +905,28 @@ public class MSBuildHelperTests : TestBase
890
905
  new Dependency("Buildalyzer", "7.0.1", DependencyType.PackageReference),
891
906
  };
892
907
 
908
+ // act
893
909
  var resolvedDependencies = await MSBuildHelper.ResolveDependencyConflicts(
894
910
  tempDirectory.DirectoryPath,
895
911
  projectPath,
896
912
  "net8.0",
897
913
  dependencies,
898
914
  update,
899
- new ExperimentsManager() { InstallDotnetSdks = useExistingSdks },
915
+ new ExperimentsManager(),
900
916
  new TestLogger()
901
917
  );
918
+
919
+ // assert
920
+ var expectedDependencies = new[]
921
+ {
922
+ "Buildalyzer/7.0.1",
923
+ "Microsoft.CodeAnalysis.CSharp.Scripting/4.0.1",
924
+ "Microsoft.CodeAnalysis.CSharp/4.0.1",
925
+ "Microsoft.CodeAnalysis.Common/4.0.1"
926
+ };
902
927
  Assert.NotNull(resolvedDependencies);
903
- Assert.Equal(4, resolvedDependencies.Length);
904
- Assert.Equal("Buildalyzer", resolvedDependencies[0].Name);
905
- Assert.Equal("7.0.1", resolvedDependencies[0].Version);
906
- Assert.Equal("Microsoft.CodeAnalysis.CSharp.Scripting", resolvedDependencies[1].Name);
907
- Assert.Equal("4.0.0", resolvedDependencies[1].Version);
908
- Assert.Equal("Microsoft.CodeAnalysis.CSharp", resolvedDependencies[2].Name);
909
- Assert.Equal("4.0.0", resolvedDependencies[2].Version);
910
- Assert.Equal("Microsoft.CodeAnalysis.Common", resolvedDependencies[3].Name);
911
- Assert.Equal("4.0.0", resolvedDependencies[3].Version);
928
+ var actualDependencies = resolvedDependencies.Select(d => $"{d.Name}/{d.Version}").ToArray();
929
+ AssertEx.Equal(expectedDependencies, actualDependencies);
912
930
  }
913
931
 
914
932
  // Updating two families at once to test efficiency
@@ -0,0 +1,65 @@
1
+ using NuGetUpdater.Core.Utilities;
2
+
3
+ using Xunit;
4
+
5
+ namespace NuGetUpdater.Core.Test.Utilities;
6
+
7
+ public class ProjectHelperTests : TestBase
8
+ {
9
+ [Theory]
10
+ [MemberData(nameof(AdditionalFile))]
11
+ public async Task GetAdditionalFilesFromProject(string projectPath, (string Name, string Content)[] files, string[] expectedAdditionalFiles)
12
+ {
13
+ using var tempDirectory = await TemporaryDirectory.CreateWithContentsAsync(files);
14
+ var fullProjectPath = Path.Join(tempDirectory.DirectoryPath, projectPath);
15
+
16
+ var actualAdditionalFiles = ProjectHelper.GetAllAdditionalFilesFromProject(fullProjectPath, ProjectHelper.PathFormat.Relative);
17
+ AssertEx.Equal(expectedAdditionalFiles, actualAdditionalFiles);
18
+ }
19
+
20
+ public static IEnumerable<object[]> AdditionalFile()
21
+ {
22
+ // no additional files
23
+ yield return
24
+ [
25
+ // project path
26
+ "src/project.csproj",
27
+ // files
28
+ new[]
29
+ {
30
+ ("src/project.csproj", """
31
+ <Project>
32
+ </Project>
33
+ """)
34
+ },
35
+ // expected additional files
36
+ Array.Empty<string>()
37
+ ];
38
+
39
+ // files with relative paths
40
+ yield return
41
+ [
42
+ // project path
43
+ "src/project.csproj",
44
+ // files
45
+ new[]
46
+ {
47
+ ("src/project.csproj", """
48
+ <Project>
49
+ <ItemGroup>
50
+ <None Include="..\unexpected-path\packages.config" />
51
+ </ItemGroup>
52
+ </Project>
53
+ """),
54
+ ("unexpected-path/packages.config", """
55
+ <packages></packages>
56
+ """)
57
+ },
58
+ // expected additional files
59
+ new[]
60
+ {
61
+ "../unexpected-path/packages.config"
62
+ }
63
+ ];
64
+ }
65
+ }
@@ -1,4 +1,3 @@
1
-
2
1
  Microsoft Visual Studio Solution File, Format Version 12.00
3
2
  # Visual Studio Version 17
4
3
  VisualStudioVersion = 17.5.33516.290
@@ -43,6 +42,12 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NuGet.Versioning", "NuGetPr
43
42
  EndProject
44
43
  Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NuGetUpdater.Cli.Test", "NuGetUpdater.Cli.Test\NuGetUpdater.Cli.Test.csproj", "{BDBEBF91-F5FD-4589-B4FB-B3DE3103B04B}"
45
44
  EndProject
45
+ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DotNetPackageCorrelation", "DotNetPackageCorrelation\DotNetPackageCorrelation.csproj", "{52A6437B-7E72-4CCF-8E1E-355000F5DC10}"
46
+ EndProject
47
+ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DotNetPackageCorrelation.Test", "DotNetPackageCorrelation.Test\DotNetPackageCorrelation.Test.csproj", "{0945703C-C8DC-44F0-B1D8-0EFE011411AE}"
48
+ EndProject
49
+ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DotNetPackageCorrelation.Cli", "DotNetPackageCorrelation.Cli\DotNetPackageCorrelation.Cli.csproj", "{509454EE-629F-4767-B1D4-7F2DF86C11B5}"
50
+ EndProject
46
51
  Global
47
52
  GlobalSection(SolutionConfigurationPlatforms) = preSolution
48
53
  Debug|Any CPU = Debug|Any CPU
@@ -125,6 +130,18 @@ Global
125
130
  {BDBEBF91-F5FD-4589-B4FB-B3DE3103B04B}.Debug|Any CPU.Build.0 = Debug|Any CPU
126
131
  {BDBEBF91-F5FD-4589-B4FB-B3DE3103B04B}.Release|Any CPU.ActiveCfg = Release|Any CPU
127
132
  {BDBEBF91-F5FD-4589-B4FB-B3DE3103B04B}.Release|Any CPU.Build.0 = Release|Any CPU
133
+ {52A6437B-7E72-4CCF-8E1E-355000F5DC10}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
134
+ {52A6437B-7E72-4CCF-8E1E-355000F5DC10}.Debug|Any CPU.Build.0 = Debug|Any CPU
135
+ {52A6437B-7E72-4CCF-8E1E-355000F5DC10}.Release|Any CPU.ActiveCfg = Release|Any CPU
136
+ {52A6437B-7E72-4CCF-8E1E-355000F5DC10}.Release|Any CPU.Build.0 = Release|Any CPU
137
+ {0945703C-C8DC-44F0-B1D8-0EFE011411AE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
138
+ {0945703C-C8DC-44F0-B1D8-0EFE011411AE}.Debug|Any CPU.Build.0 = Debug|Any CPU
139
+ {0945703C-C8DC-44F0-B1D8-0EFE011411AE}.Release|Any CPU.ActiveCfg = Release|Any CPU
140
+ {0945703C-C8DC-44F0-B1D8-0EFE011411AE}.Release|Any CPU.Build.0 = Release|Any CPU
141
+ {509454EE-629F-4767-B1D4-7F2DF86C11B5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
142
+ {509454EE-629F-4767-B1D4-7F2DF86C11B5}.Debug|Any CPU.Build.0 = Debug|Any CPU
143
+ {509454EE-629F-4767-B1D4-7F2DF86C11B5}.Release|Any CPU.ActiveCfg = Release|Any CPU
144
+ {509454EE-629F-4767-B1D4-7F2DF86C11B5}.Release|Any CPU.Build.0 = Release|Any CPU
128
145
  EndGlobalSection
129
146
  GlobalSection(SolutionProperties) = preSolution
130
147
  HideSolutionNode = FALSE
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "sdk": {
3
- "version": "9.0.100",
3
+ "version": "9.0.101",
4
4
  "rollForward": "latestMinor"
5
5
  }
6
6
  }
@@ -12,7 +12,11 @@ module Dependabot
12
12
 
13
13
  sig { params(language: String, raw_version: String, requirement: T.nilable(Requirement)).void }
14
14
  def initialize(language, raw_version, requirement = nil)
15
- super(language, Version.new(raw_version), [], [], requirement)
15
+ super(
16
+ name: language,
17
+ version: Version.new(raw_version),
18
+ requirement: requirement,
19
+ )
16
20
  end
17
21
  end
18
22
 
@@ -28,7 +32,10 @@ module Dependabot
28
32
 
29
33
  sig { params(language: String, requirement: T.nilable(Requirement)).void }
30
34
  def initialize(language, requirement = nil)
31
- super(language, Version.new(nil), [], [], requirement)
35
+ super(
36
+ name: language,
37
+ requirement: requirement,
38
+ )
32
39
  end
33
40
  end
34
41
 
@@ -44,7 +51,10 @@ module Dependabot
44
51
 
45
52
  sig { params(language: String, requirement: T.nilable(Requirement)).void }
46
53
  def initialize(language, requirement = nil)
47
- super(language, Version.new(nil), [], [], requirement)
54
+ super(
55
+ name: language,
56
+ requirement: requirement,
57
+ )
48
58
  end
49
59
  end
50
60
 
@@ -60,7 +70,10 @@ module Dependabot
60
70
 
61
71
  sig { params(language: String, requirement: T.nilable(Requirement)).void }
62
72
  def initialize(language, requirement = nil)
63
- super(language, Version.new(nil), [], [], requirement)
73
+ super(
74
+ name: language,
75
+ requirement: requirement,
76
+ )
64
77
  end
65
78
  end
66
79
 
@@ -75,7 +88,10 @@ module Dependabot
75
88
 
76
89
  sig { params(language: String, requirement: T.nilable(Requirement)).void }
77
90
  def initialize(language, requirement = nil)
78
- super(language, Version.new(nil), [], [], requirement)
91
+ super(
92
+ name: language,
93
+ requirement: requirement,
94
+ )
79
95
  end
80
96
  end
81
97
  end