dependabot-nuget 0.295.0 → 0.296.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 (27) hide show
  1. checksums.yaml +4 -4
  2. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Analyze/AnalyzeWorker.cs +2 -0
  3. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Analyze/CompatabilityChecker.cs +6 -7
  4. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Analyze/VersionFinder.cs +29 -4
  5. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Analyze/VersionResult.cs +7 -10
  6. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/DependencyDiscovery.props +2 -1
  7. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/ExperimentsManager.cs +6 -2
  8. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/ApiModel/ClosePullRequest.cs +12 -0
  9. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/ApiModel/PullRequestExistsForLatestVersion.cs +11 -0
  10. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/ApiModel/SecurityUpdateNotNeeded.cs +10 -0
  11. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/ApiModel/UpdatePullRequest.cs +28 -0
  12. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/HttpApiHandler.cs +5 -0
  13. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/IApiHandler.cs +1 -0
  14. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/RunWorker.cs +106 -64
  15. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/TargetFrameworkReporter.targets +1 -6
  16. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Utilities/DependencyConflictResolver.cs +5 -2
  17. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Utilities/MSBuildHelper.cs +54 -36
  18. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Utilities/PathComparer.cs +13 -6
  19. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Analyze/VersionFinderTests.cs +33 -0
  20. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Discover/DiscoveryWorkerTests.Project.cs +8 -4
  21. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Run/MiscellaneousTests.cs +175 -0
  22. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Run/RunWorkerTests.cs +21 -21
  23. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Run/SerializationTests.cs +99 -0
  24. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Run/TestApiHandler.cs +6 -0
  25. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Run/UpdatedDependencyListTests.cs +10 -10
  26. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Utilities/MSBuildHelperTests.cs +107 -0
  27. metadata +9 -5
@@ -227,6 +227,36 @@ public class SerializationTests
227
227
  Assert.False(experimentsManager.UseDirectDiscovery);
228
228
  }
229
229
 
230
+ [Fact]
231
+ public void DeserializeExperimentsManager_AlternateNames()
232
+ {
233
+ // experiment names can be either snake case or kebab case
234
+ var jobWrapper = RunWorker.Deserialize("""
235
+ {
236
+ "job": {
237
+ "package-manager": "nuget",
238
+ "allowed-updates": [
239
+ {
240
+ "update-type": "all"
241
+ }
242
+ ],
243
+ "source": {
244
+ "provider": "github",
245
+ "repo": "some-org/some-repo",
246
+ "directory": "some-dir"
247
+ },
248
+ "experiments": {
249
+ "nuget-legacy-dependency-solver": true,
250
+ "nuget-use-direct-discovery": true
251
+ }
252
+ }
253
+ }
254
+ """);
255
+ var experimentsManager = ExperimentsManager.GetExperimentsManager(jobWrapper.Job.Experiments);
256
+ Assert.True(experimentsManager.UseLegacyDependencySolver);
257
+ Assert.True(experimentsManager.UseDirectDiscovery);
258
+ }
259
+
230
260
  [Theory]
231
261
  [MemberData(nameof(DeserializeErrorTypesData))]
232
262
  public void SerializeError(JobErrorBase error, string expectedSerialization)
@@ -511,6 +541,59 @@ public class SerializationTests
511
541
  Assert.True(jobWrapper.Job.CommitMessageOptions!.IncludeScope);
512
542
  }
513
543
 
544
+ [Fact]
545
+ public void SerializeClosePullRequest()
546
+ {
547
+ var close = new ClosePullRequest()
548
+ {
549
+ DependencyNames = ["dep"],
550
+ };
551
+ var actual = HttpApiHandler.Serialize(close);
552
+ var expected = """
553
+ {"data":{"dependency-names":["dep"],"reason":"up_to_date"}}
554
+ """;
555
+ Assert.Equal(expected, actual);
556
+ }
557
+
558
+ [Fact]
559
+ public void SerializeCreatePullRequest()
560
+ {
561
+ var create = new CreatePullRequest()
562
+ {
563
+ Dependencies = [new() { Name = "dep", Version = "ver2", PreviousVersion = "ver1", Requirements = [new() { Requirement = "ver2", File = "project.csproj" }], PreviousRequirements = [new() { Requirement = "ver1", File = "project.csproj" }] }],
564
+ UpdatedDependencyFiles = [new() { Name = "project.csproj", Directory = "/", Content = "updated content" }],
565
+ BaseCommitSha = "TEST-COMMIT-SHA",
566
+ CommitMessage = "commit message",
567
+ PrTitle = "pr title",
568
+ PrBody = "pr body"
569
+ };
570
+ var actual = HttpApiHandler.Serialize(create);
571
+ var expected = """
572
+ {"data":{"dependencies":[{"name":"dep","version":"ver2","requirements":[{"requirement":"ver2","file":"project.csproj","groups":[],"source":null}],"previous-version":"ver1","previous-requirements":[{"requirement":"ver1","file":"project.csproj","groups":[],"source":null}]}],"updated-dependency-files":[{"name":"project.csproj","content":"updated content","directory":"/","type":"file","support_file":false,"content_encoding":"utf-8","deleted":false,"operation":"update","mode":null}],"base-commit-sha":"TEST-COMMIT-SHA","commit-message":"commit message","pr-title":"pr title","pr-body":"pr body"}}
573
+ """;
574
+ Assert.Equal(expected, actual);
575
+ }
576
+
577
+ [Fact]
578
+ public void SerializeUpdatePullRequest()
579
+ {
580
+ var update = new UpdatePullRequest()
581
+ {
582
+ BaseCommitSha = "TEST-COMMIT-SHA",
583
+ DependencyNames = ["dep"],
584
+ UpdatedDependencyFiles = [new() { Name = "project.csproj", Directory = "/", Content = "updated content" }],
585
+ PrTitle = "pr title",
586
+ PrBody = "pr body",
587
+ CommitMessage = "commit message",
588
+ DependencyGroup = null,
589
+ };
590
+ var actual = HttpApiHandler.Serialize(update);
591
+ var expected = """
592
+ {"data":{"base-commit-sha":"TEST-COMMIT-SHA","dependency-names":["dep"],"updated-dependency-files":[{"name":"project.csproj","content":"updated content","directory":"/","type":"file","support_file":false,"content_encoding":"utf-8","deleted":false,"operation":"update","mode":null}],"pr-title":"pr title","pr-body":"pr body","commit-message":"commit message","dependency-group":null}}
593
+ """;
594
+ Assert.Equal(expected, actual);
595
+ }
596
+
514
597
  public static IEnumerable<object?[]> DeserializeErrorTypesData()
515
598
  {
516
599
  yield return
@@ -553,6 +636,22 @@ public class SerializationTests
553
636
  """
554
637
  ];
555
638
 
639
+ yield return
640
+ [
641
+ new PullRequestExistsForLatestVersion("dep", "ver"),
642
+ """
643
+ {"data":{"error-type":"pull_request_exists_for_latest_version","error-details":{"dependency-name":"dep","dependency-version":"ver"}}}
644
+ """
645
+ ];
646
+
647
+ yield return
648
+ [
649
+ new SecurityUpdateNotNeeded("dep"),
650
+ """
651
+ {"data":{"error-type":"security_update_not_needed","error-details":{"dependency-name":"dep"}}}
652
+ """
653
+ ];
654
+
556
655
  yield return
557
656
  [
558
657
  new UnknownError(new Exception("some message"), "JOB-ID"),
@@ -33,6 +33,12 @@ internal class TestApiHandler : IApiHandler
33
33
  return Task.CompletedTask;
34
34
  }
35
35
 
36
+ public Task UpdatePullRequest(UpdatePullRequest updatePullRequest)
37
+ {
38
+ _receivedMessages.Add((updatePullRequest.GetType(), updatePullRequest));
39
+ return Task.CompletedTask;
40
+ }
41
+
36
42
  public Task MarkAsProcessed(MarkAsProcessed markAsProcessed)
37
43
  {
38
44
  _receivedMessages.Add((markAsProcessed.GetType(), markAsProcessed));
@@ -92,31 +92,31 @@ public class UpdatedDependencyListTests
92
92
  },
93
93
  new ReportedDependency()
94
94
  {
95
- Name = "System.Text.Json",
96
- Version = "6.0.0",
95
+ Name = "Newtonsoft.Json",
96
+ Version = "13.0.1",
97
97
  Requirements =
98
98
  [
99
99
  new ReportedRequirement()
100
100
  {
101
- Requirement = "6.0.0",
101
+ Requirement = "13.0.1",
102
102
  File = "/src/c/project.csproj",
103
103
  Groups = ["dependencies"],
104
- }
105
- ],
104
+ },
105
+ ]
106
106
  },
107
107
  new ReportedDependency()
108
108
  {
109
- Name = "Newtonsoft.Json",
110
- Version = "13.0.1",
109
+ Name = "System.Text.Json",
110
+ Version = "6.0.0",
111
111
  Requirements =
112
112
  [
113
113
  new ReportedRequirement()
114
114
  {
115
- Requirement = "13.0.1",
115
+ Requirement = "6.0.0",
116
116
  File = "/src/c/project.csproj",
117
117
  Groups = ["dependencies"],
118
- },
119
- ]
118
+ }
119
+ ],
120
120
  },
121
121
  ],
122
122
  DependencyFiles = ["/src/a/packages.config", "/src/a/project.csproj", "/src/b/packages.config", "/src/b/project.csproj", "/src/c/packages.config", "/src/c/project.csproj"],
@@ -538,6 +538,89 @@ public class MSBuildHelperTests : TestBase
538
538
  """, evaluatedValue);
539
539
  }
540
540
 
541
+ [Theory]
542
+ [MemberData(nameof(GetTargetFrameworkValuesFromProjectData))]
543
+ public async Task GetTargetFrameworkValuesFromProject(string projectContents, string[] expectedTfms)
544
+ {
545
+ using var tempDir = await TemporaryDirectory.CreateWithContentsAsync(
546
+ [
547
+ ("Directory.Build.props", "<Project />"),
548
+ ("Directory.Build.targets", "<Project />"),
549
+ ("project.csproj", projectContents)
550
+ ]);
551
+ var projectPath = Path.Combine(tempDir.DirectoryPath, "project.csproj");
552
+ var experimentsManager = new ExperimentsManager();
553
+ var logger = new TestLogger();
554
+ var actualTfms = await MSBuildHelper.GetTargetFrameworkValuesFromProject(tempDir.DirectoryPath, projectPath, experimentsManager, logger);
555
+ AssertEx.Equal(expectedTfms, actualTfms);
556
+ }
557
+
558
+ public static IEnumerable<object[]> GetTargetFrameworkValuesFromProjectData()
559
+ {
560
+ // SDK-style projects
561
+ yield return
562
+ [
563
+ """
564
+ <Project Sdk="Microsoft.NET.Sdk">
565
+ <PropertyGroup>
566
+ <TargetFramework>net8.0</TargetFramework>
567
+ </PropertyGroup>
568
+ </Project>
569
+ """,
570
+ new[] { "net8.0" }
571
+ ];
572
+
573
+ yield return
574
+ [
575
+ """
576
+ <Project Sdk="Microsoft.NET.Sdk">
577
+ <PropertyGroup>
578
+ <TargetFrameworks> ; net8.0 ; </TargetFrameworks>
579
+ </PropertyGroup>
580
+ </Project>
581
+ """,
582
+ new[] { "net8.0" }
583
+ ];
584
+
585
+ yield return
586
+ [
587
+ """
588
+ <Project Sdk="Microsoft.NET.Sdk">
589
+ <PropertyGroup>
590
+ <TargetFrameworks>net8.0;net9.0</TargetFrameworks>
591
+ </PropertyGroup>
592
+ </Project>
593
+ """,
594
+ new[] { "net8.0", "net9.0" }
595
+ ];
596
+
597
+ yield return
598
+ [
599
+ """
600
+ <Project Sdk="Microsoft.NET.Sdk">
601
+ <PropertyGroup>
602
+ <TargetFramework>net8.0-windows7.0</TargetFramework>
603
+ </PropertyGroup>
604
+ </Project>
605
+ """,
606
+ new[] { "net8.0-windows7.0" }
607
+ ];
608
+
609
+ // legacy projects
610
+ yield return
611
+ [
612
+ """
613
+ <Project ToolsVersion="15.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
614
+ <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
615
+ <PropertyGroup>
616
+ <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
617
+ </PropertyGroup>
618
+ <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
619
+ </Project>
620
+ """,
621
+ new[] { "net45" }
622
+ ];
623
+ }
541
624
 
542
625
  #region
543
626
  // Updating root package
@@ -1450,6 +1533,30 @@ public class MSBuildHelperTests : TestBase
1450
1533
  // expectedError
1451
1534
  new UpdateNotPossible(["Some.Package.1.2.3"]),
1452
1535
  ];
1536
+
1537
+ yield return
1538
+ [
1539
+ // output
1540
+ "Could not install package 'Some.Package 1.2.3'. You are trying to install this package into a project that targets 'SomeFramework'",
1541
+ // expectedError
1542
+ new UpdateNotPossible(["Some.Package.1.2.3"]),
1543
+ ];
1544
+
1545
+ yield return
1546
+ [
1547
+ // output
1548
+ "Unable to find a version of 'Some.Package' that is compatible with 'Some.Other.Package 4.5.6 constraint: Some.Package (>= 1.2.3)'",
1549
+ // expectedError
1550
+ new UpdateNotPossible(["Some.Package.1.2.3"]),
1551
+ ];
1552
+
1553
+ yield return
1554
+ [
1555
+ // output
1556
+ "the following error(s) may be blocking the current package operation: 'Some.Package 1.2.3 constraint: Some.Other.Package (>= 4.5.6)'",
1557
+ // expectedError
1558
+ new UpdateNotPossible(["Some.Package.1.2.3"]),
1559
+ ];
1453
1560
  }
1454
1561
 
1455
1562
  public static IEnumerable<object[]> GetTopLevelPackageDependencyInfosTestData()
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dependabot-nuget
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.295.0
4
+ version: 0.296.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dependabot
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2025-01-30 00:00:00.000000000 Z
11
+ date: 2025-02-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: dependabot-common
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - '='
18
18
  - !ruby/object:Gem::Version
19
- version: 0.295.0
19
+ version: 0.296.1
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - '='
25
25
  - !ruby/object:Gem::Version
26
- version: 0.295.0
26
+ version: 0.296.1
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rubyzip
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -438,6 +438,7 @@ files:
438
438
  - helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/ApiModel/Advisory.cs
439
439
  - helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/ApiModel/AllowedUpdate.cs
440
440
  - helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/ApiModel/BadRequirement.cs
441
+ - helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/ApiModel/ClosePullRequest.cs
441
442
  - helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/ApiModel/CommitOptions.cs
442
443
  - helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/ApiModel/Condition.cs
443
444
  - helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/ApiModel/CreatePullRequest.cs
@@ -455,12 +456,15 @@ files:
455
456
  - helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/ApiModel/MarkAsProcessed.cs
456
457
  - helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/ApiModel/PrivateSourceAuthenticationFailure.cs
457
458
  - helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/ApiModel/PullRequest.cs
459
+ - helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/ApiModel/PullRequestExistsForLatestVersion.cs
458
460
  - helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/ApiModel/ReportedDependency.cs
459
461
  - helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/ApiModel/ReportedRequirement.cs
460
462
  - helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/ApiModel/RequirementSource.cs
461
463
  - helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/ApiModel/RequirementsUpdateStrategy.cs
464
+ - helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/ApiModel/SecurityUpdateNotNeeded.cs
462
465
  - helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/ApiModel/UnknownError.cs
463
466
  - helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/ApiModel/UpdateNotPossible.cs
467
+ - helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/ApiModel/UpdatePullRequest.cs
464
468
  - helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/ApiModel/UpdatedDependencyList.cs
465
469
  - helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/HttpApiHandler.cs
466
470
  - helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/IApiHandler.cs
@@ -529,7 +533,7 @@ licenses:
529
533
  - MIT
530
534
  metadata:
531
535
  bug_tracker_uri: https://github.com/dependabot/dependabot-core/issues
532
- changelog_uri: https://github.com/dependabot/dependabot-core/releases/tag/v0.295.0
536
+ changelog_uri: https://github.com/dependabot/dependabot-core/releases/tag/v0.296.1
533
537
  post_install_message:
534
538
  rdoc_options: []
535
539
  require_paths: