dependabot-nuget 0.311.0 → 0.312.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.
Files changed (26) hide show
  1. checksums.yaml +4 -4
  2. data/helpers/lib/NuGetUpdater/NuGetUpdater.Cli.Test/EntryPointTests.Run.cs +2 -2
  3. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Analyze/VersionFinder.cs +7 -0
  4. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/BadResponseException.cs +12 -0
  5. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Discover/SdkProjectDiscovery.cs +121 -9
  6. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/ApiModel/JobErrorBase.cs +7 -0
  7. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/ApiModel/UnknownError.cs +12 -2
  8. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/HttpApiHandler.cs +19 -50
  9. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/IApiHandler.cs +33 -7
  10. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/RunWorker.cs +10 -5
  11. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Updater/PackageReferenceUpdater.cs +13 -1
  12. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Utilities/MSBuildHelper.cs +1 -0
  13. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Analyze/VersionFinderTests.cs +74 -1
  14. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Clone/CloneWorkerTests.cs +1 -1
  15. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Discover/DiscoveryWorkerTests.Project.cs +3 -9
  16. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Discover/DiscoveryWorkerTests.cs +1 -2
  17. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Discover/SdkProjectDiscoveryTests.cs +58 -2
  18. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Run/HttpApiHandlerTests.cs +116 -0
  19. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Run/MessageReportTests.cs +1 -2
  20. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Run/RunWorkerTests.cs +227 -6
  21. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Run/SerializationTests.cs +40 -11
  22. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Run/TestApiHandler.cs +2 -39
  23. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/TestHttpServer.cs +9 -5
  24. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Update/PackageReferenceUpdaterTests.cs +99 -1
  25. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Utilities/MSBuildHelperTests.cs +8 -0
  26. metadata +25 -23
@@ -10,13 +10,13 @@ namespace NuGetUpdater.Core.Test
10
10
  {
11
11
  public class TestHttpServer : IDisposable
12
12
  {
13
- private readonly Func<string, string, (int, byte[])> _requestHandler;
13
+ private readonly Func<string, string, (int, byte[]?)> _requestHandler;
14
14
  private readonly HttpListener _listener;
15
15
  private bool _runServer = true;
16
16
 
17
17
  public string BaseUrl { get; }
18
18
 
19
- private TestHttpServer(string baseurl, Func<string, string, (int, byte[])> requestHandler)
19
+ private TestHttpServer(string baseurl, Func<string, string, (int, byte[]?)> requestHandler)
20
20
  {
21
21
  BaseUrl = baseurl;
22
22
  _requestHandler = requestHandler;
@@ -45,7 +45,11 @@ namespace NuGetUpdater.Core.Test
45
45
  var context = await _listener.GetContextAsync();
46
46
  var (statusCode, response) = _requestHandler(context.Request.HttpMethod, context.Request.Url!.AbsoluteUri);
47
47
  context.Response.StatusCode = statusCode;
48
- await context.Response.OutputStream.WriteAsync(response);
48
+ if (response is not null)
49
+ {
50
+ await context.Response.OutputStream.WriteAsync(response);
51
+ }
52
+
49
53
  context.Response.Close();
50
54
  }
51
55
  }
@@ -57,7 +61,7 @@ namespace NuGetUpdater.Core.Test
57
61
  return CreateTestServer((method, url) => requestHandler(url));
58
62
  }
59
63
 
60
- public static TestHttpServer CreateTestServer(Func<string, string, (int, byte[])> requestHandler)
64
+ public static TestHttpServer CreateTestServer(Func<string, string, (int, byte[]?)> requestHandler)
61
65
  {
62
66
  // static lock to ensure the port is not recycled after `FindFreePort()` and before we can start the real server
63
67
  lock (PortGate)
@@ -77,7 +81,7 @@ namespace NuGetUpdater.Core.Test
77
81
 
78
82
  public static TestHttpServer CreateTestStringServer(Func<string, string, (int, string)> requestHandler)
79
83
  {
80
- Func<string, string, (int, byte[])> bytesRequestHandler = (method, url) =>
84
+ Func<string, string, (int, byte[]?)> bytesRequestHandler = (method, url) =>
81
85
  {
82
86
  var (statusCode, response) = requestHandler(method, url);
83
87
  return (statusCode, Encoding.UTF8.GetBytes(response));
@@ -55,7 +55,7 @@ public class PackageReferenceUpdaterTests
55
55
 
56
56
  // assert
57
57
  await buildFile.SaveAsync();
58
- var actualContents = await File.ReadAllTextAsync(fullProjectPath);
58
+ var actualContents = await File.ReadAllTextAsync(fullProjectPath, TestContext.Current.CancellationToken);
59
59
  var expectedContents = """
60
60
  <Project Sdk="Microsoft.NET.Sdk">
61
61
  <PropertyGroup>
@@ -71,6 +71,104 @@ public class PackageReferenceUpdaterTests
71
71
  Assert.Equal(expectedContents, actualContents);
72
72
  }
73
73
 
74
+ [Fact]
75
+ public async Task DirectBuildFileChangesAreMaintainedWhenPinningTransitiveDependency_DirectoryPackagesPropsIsDiscovered()
76
+ {
77
+ // arrange
78
+ using var tempDir = await TemporaryDirectory.CreateWithContentsAsync(
79
+ [
80
+ ("project.csproj", """
81
+ <Project Sdk="Microsoft.NET.Sdk">
82
+ <PropertyGroup>
83
+ <TargetFramework>net9.0</TargetFramework>
84
+ </PropertyGroup>
85
+ <ItemGroup>
86
+ <PackageReference Include="Completely.Different.Package" />
87
+ <PackageReference Include="Some.Package" />
88
+ </ItemGroup>
89
+ </Project>
90
+ """),
91
+ ("Directory.Packages.props", """
92
+ <Project>
93
+ <PropertyGroup>
94
+ <ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
95
+ </PropertyGroup>
96
+ <ItemGroup>
97
+ <PackageVersion Include="Completely.Different.Package" Version="1.0.0" />
98
+ <PackageVersion Include="Some.Package" Version="1.0.0" />
99
+ </ItemGroup>
100
+ </Project>
101
+ """)
102
+ ]);
103
+ var packages = new[]
104
+ {
105
+ MockNuGetPackage.CreateSimplePackage("Completely.Different.Package", "1.0.0", "net9.0"),
106
+ MockNuGetPackage.CreateSimplePackage("Completely.Different.Package", "2.0.0", "net9.0"),
107
+ MockNuGetPackage.CreateSimplePackage("Some.Package", "1.0.0", "net9.0", [(null, [("Transitive.Package", "1.0.0")])]),
108
+ MockNuGetPackage.CreateSimplePackage("Transitive.Package", "1.0.0", "net9.0"),
109
+ MockNuGetPackage.CreateSimplePackage("Transitive.Package", "2.0.0", "net9.0"),
110
+ };
111
+ await UpdateWorkerTestBase.MockNuGetPackagesInDirectory(packages, tempDir.DirectoryPath);
112
+ var fullProjectPath = Path.Combine(tempDir.DirectoryPath, "project.csproj");
113
+ var fullDirectoryPackagesPath = Path.Combine(tempDir.DirectoryPath, "Directory.Packages.props");
114
+ var buildFiles = new[]
115
+ {
116
+ ProjectBuildFile.Open(tempDir.DirectoryPath, fullProjectPath),
117
+ ProjectBuildFile.Open(tempDir.DirectoryPath, fullDirectoryPackagesPath)
118
+ }.ToImmutableArray();
119
+ var experimentsManager = new ExperimentsManager();
120
+
121
+ // act
122
+ // pin transitive dependency
123
+ var updatedFiles = await PackageReferenceUpdater.UpdateTransitiveDependencyAsync(
124
+ tempDir.DirectoryPath,
125
+ fullProjectPath,
126
+ "Transitive.Package",
127
+ "2.0.0",
128
+ buildFiles,
129
+ experimentsManager,
130
+ new TestLogger());
131
+
132
+ // subsequent update should not overwrite previous change
133
+ PackageReferenceUpdater.TryUpdateDependencyVersion(buildFiles, "Completely.Different.Package", "1.0.0", "2.0.0", new TestLogger());
134
+
135
+ // assert
136
+ foreach (var bf in buildFiles)
137
+ {
138
+ await bf.SaveAsync();
139
+ }
140
+
141
+ var actualProjectContents = await File.ReadAllTextAsync(fullProjectPath, TestContext.Current.CancellationToken);
142
+ var expectedProjectContents = """
143
+ <Project Sdk="Microsoft.NET.Sdk">
144
+ <PropertyGroup>
145
+ <TargetFramework>net9.0</TargetFramework>
146
+ </PropertyGroup>
147
+ <ItemGroup>
148
+ <PackageReference Include="Completely.Different.Package" />
149
+ <PackageReference Include="Some.Package" />
150
+ <PackageReference Include="Transitive.Package" />
151
+ </ItemGroup>
152
+ </Project>
153
+ """;
154
+ Assert.Equal(expectedProjectContents.Replace("\r", ""), actualProjectContents.Replace("\r", ""));
155
+
156
+ var actualDirectoryPackagesContents = await File.ReadAllTextAsync(fullDirectoryPackagesPath, TestContext.Current.CancellationToken);
157
+ var expectedDirectoryPackagesContents = """
158
+ <Project>
159
+ <PropertyGroup>
160
+ <ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
161
+ </PropertyGroup>
162
+ <ItemGroup>
163
+ <PackageVersion Include="Completely.Different.Package" Version="2.0.0" />
164
+ <PackageVersion Include="Some.Package" Version="1.0.0" />
165
+ <PackageVersion Include="Transitive.Package" Version="2.0.0" />
166
+ </ItemGroup>
167
+ </Project>
168
+ """;
169
+ Assert.Equal(expectedDirectoryPackagesContents.Replace("\r", ""), actualDirectoryPackagesContents.Replace("\r", ""));
170
+ }
171
+
74
172
  [Theory]
75
173
  [MemberData(nameof(ComputeUpdateOperationsTestData))]
76
174
  public async Task ComputeUpdateOperations
@@ -1852,6 +1852,14 @@ public class MSBuildHelperTests : TestBase
1852
1852
  // expectedError
1853
1853
  new UpdateNotPossible(["Some.Package.1.2.3"]),
1854
1854
  ];
1855
+
1856
+ yield return
1857
+ [
1858
+ // output
1859
+ "Failed to fetch results from V2 feed at 'http://nuget.example.com/FindPackagesById()?id='Some.Package'&semVerLevel=2.0.0' with following message : Response status code does not indicate success: 404.",
1860
+ // expectedError
1861
+ new DependencyNotFound("Some.Package"),
1862
+ ];
1855
1863
  }
1856
1864
 
1857
1865
  public static IEnumerable<object[]> GetTopLevelPackageDependencyInfosTestData()
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dependabot-nuget
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.311.0
4
+ version: 0.312.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dependabot
8
8
  bindir: bin
9
9
  cert_chain: []
10
- date: 2025-05-01 00:00:00.000000000 Z
10
+ date: 2025-05-09 00:00:00.000000000 Z
11
11
  dependencies:
12
12
  - !ruby/object:Gem::Dependency
13
13
  name: dependabot-common
@@ -15,14 +15,14 @@ dependencies:
15
15
  requirements:
16
16
  - - '='
17
17
  - !ruby/object:Gem::Version
18
- version: 0.311.0
18
+ version: 0.312.0
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.311.0
25
+ version: 0.312.0
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: rubyzip
28
28
  requirement: !ruby/object:Gem::Requirement
@@ -49,14 +49,14 @@ dependencies:
49
49
  requirements:
50
50
  - - "~>"
51
51
  - !ruby/object:Gem::Version
52
- version: 1.9.2
52
+ version: '1.9'
53
53
  type: :development
54
54
  prerelease: false
55
55
  version_requirements: !ruby/object:Gem::Requirement
56
56
  requirements:
57
57
  - - "~>"
58
58
  - !ruby/object:Gem::Version
59
- version: 1.9.2
59
+ version: '1.9'
60
60
  - !ruby/object:Gem::Dependency
61
61
  name: gpgme
62
62
  requirement: !ruby/object:Gem::Requirement
@@ -77,14 +77,14 @@ dependencies:
77
77
  requirements:
78
78
  - - "~>"
79
79
  - !ruby/object:Gem::Version
80
- version: '13'
80
+ version: '13.2'
81
81
  type: :development
82
82
  prerelease: false
83
83
  version_requirements: !ruby/object:Gem::Requirement
84
84
  requirements:
85
85
  - - "~>"
86
86
  - !ruby/object:Gem::Version
87
- version: '13'
87
+ version: '13.2'
88
88
  - !ruby/object:Gem::Dependency
89
89
  name: rspec
90
90
  requirement: !ruby/object:Gem::Requirement
@@ -119,98 +119,98 @@ dependencies:
119
119
  requirements:
120
120
  - - "~>"
121
121
  - !ruby/object:Gem::Version
122
- version: 1.9.2
122
+ version: '1.9'
123
123
  type: :development
124
124
  prerelease: false
125
125
  version_requirements: !ruby/object:Gem::Requirement
126
126
  requirements:
127
127
  - - "~>"
128
128
  - !ruby/object:Gem::Version
129
- version: 1.9.2
129
+ version: '1.9'
130
130
  - !ruby/object:Gem::Dependency
131
131
  name: rubocop
132
132
  requirement: !ruby/object:Gem::Requirement
133
133
  requirements:
134
134
  - - "~>"
135
135
  - !ruby/object:Gem::Version
136
- version: 1.67.0
136
+ version: '1.67'
137
137
  type: :development
138
138
  prerelease: false
139
139
  version_requirements: !ruby/object:Gem::Requirement
140
140
  requirements:
141
141
  - - "~>"
142
142
  - !ruby/object:Gem::Version
143
- version: 1.67.0
143
+ version: '1.67'
144
144
  - !ruby/object:Gem::Dependency
145
145
  name: rubocop-performance
146
146
  requirement: !ruby/object:Gem::Requirement
147
147
  requirements:
148
148
  - - "~>"
149
149
  - !ruby/object:Gem::Version
150
- version: 1.22.1
150
+ version: '1.22'
151
151
  type: :development
152
152
  prerelease: false
153
153
  version_requirements: !ruby/object:Gem::Requirement
154
154
  requirements:
155
155
  - - "~>"
156
156
  - !ruby/object:Gem::Version
157
- version: 1.22.1
157
+ version: '1.22'
158
158
  - !ruby/object:Gem::Dependency
159
159
  name: rubocop-rspec
160
160
  requirement: !ruby/object:Gem::Requirement
161
161
  requirements:
162
162
  - - "~>"
163
163
  - !ruby/object:Gem::Version
164
- version: 2.29.1
164
+ version: '2.29'
165
165
  type: :development
166
166
  prerelease: false
167
167
  version_requirements: !ruby/object:Gem::Requirement
168
168
  requirements:
169
169
  - - "~>"
170
170
  - !ruby/object:Gem::Version
171
- version: 2.29.1
171
+ version: '2.29'
172
172
  - !ruby/object:Gem::Dependency
173
173
  name: rubocop-sorbet
174
174
  requirement: !ruby/object:Gem::Requirement
175
175
  requirements:
176
176
  - - "~>"
177
177
  - !ruby/object:Gem::Version
178
- version: 0.8.7
178
+ version: '0.8'
179
179
  type: :development
180
180
  prerelease: false
181
181
  version_requirements: !ruby/object:Gem::Requirement
182
182
  requirements:
183
183
  - - "~>"
184
184
  - !ruby/object:Gem::Version
185
- version: 0.8.7
185
+ version: '0.8'
186
186
  - !ruby/object:Gem::Dependency
187
187
  name: simplecov
188
188
  requirement: !ruby/object:Gem::Requirement
189
189
  requirements:
190
190
  - - "~>"
191
191
  - !ruby/object:Gem::Version
192
- version: 0.22.0
192
+ version: '0.22'
193
193
  type: :development
194
194
  prerelease: false
195
195
  version_requirements: !ruby/object:Gem::Requirement
196
196
  requirements:
197
197
  - - "~>"
198
198
  - !ruby/object:Gem::Version
199
- version: 0.22.0
199
+ version: '0.22'
200
200
  - !ruby/object:Gem::Dependency
201
201
  name: turbo_tests
202
202
  requirement: !ruby/object:Gem::Requirement
203
203
  requirements:
204
204
  - - "~>"
205
205
  - !ruby/object:Gem::Version
206
- version: 2.2.0
206
+ version: '2.2'
207
207
  type: :development
208
208
  prerelease: false
209
209
  version_requirements: !ruby/object:Gem::Requirement
210
210
  requirements:
211
211
  - - "~>"
212
212
  - !ruby/object:Gem::Version
213
- version: 2.2.0
213
+ version: '2.2'
214
214
  - !ruby/object:Gem::Dependency
215
215
  name: vcr
216
216
  requirement: !ruby/object:Gem::Requirement
@@ -347,6 +347,7 @@ files:
347
347
  - helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/MockNuGetPackage.cs
348
348
  - helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/NuGetUpdater.Core.Test.csproj
349
349
  - helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Run/EndToEndTests.cs
350
+ - helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Run/HttpApiHandlerTests.cs
350
351
  - helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Run/MessageReportTests.cs
351
352
  - helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Run/MiscellaneousTests.cs
352
353
  - helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Run/PullRequestMessageTests.cs
@@ -405,6 +406,7 @@ files:
405
406
  - helpers/lib/NuGetUpdater/NuGetUpdater.Core/Analyze/VersionFinder.cs
406
407
  - helpers/lib/NuGetUpdater/NuGetUpdater.Core/Analyze/VersionResult.cs
407
408
  - helpers/lib/NuGetUpdater/NuGetUpdater.Core/BadRequirementException.cs
409
+ - helpers/lib/NuGetUpdater/NuGetUpdater.Core/BadResponseException.cs
408
410
  - helpers/lib/NuGetUpdater/NuGetUpdater.Core/Clone/CloneWorker.cs
409
411
  - helpers/lib/NuGetUpdater/NuGetUpdater.Core/Clone/IGitCommandHandler.cs
410
412
  - helpers/lib/NuGetUpdater/NuGetUpdater.Core/Clone/ShellGitCommandHandler.cs
@@ -555,7 +557,7 @@ licenses:
555
557
  - MIT
556
558
  metadata:
557
559
  bug_tracker_uri: https://github.com/dependabot/dependabot-core/issues
558
- changelog_uri: https://github.com/dependabot/dependabot-core/releases/tag/v0.311.0
560
+ changelog_uri: https://github.com/dependabot/dependabot-core/releases/tag/v0.312.0
559
561
  rdoc_options: []
560
562
  require_paths:
561
563
  - lib