dependabot-nuget 0.345.0 → 0.346.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7165cb0246630d370d724bfcfeb22ed03175c78145255faa76643f7b03cf60fe
4
- data.tar.gz: 174ba03152133f0c03fe6da96cae0b110b6f7642482c325be3dfab2a397b261f
3
+ metadata.gz: 1560ef2944db7a46d2e26478b56c91abc4a054bbb325003e4435d89e6e23ae94
4
+ data.tar.gz: 0d00ce7b7ebdeaea3752ed889b904a87648e5bc1a13e1ac9c1e53abab9835b53
5
5
  SHA512:
6
- metadata.gz: b64d571108c83699e1dc521d883979b968c2e6ded9644cada7513fe319046c6fc31d235c77ba63b59ae0deed8c29768140125d7425956669921a50b1034821e9
7
- data.tar.gz: 30e4eebd3db7f09e8b9c6af6bbbfdee7a1456e0c1a001ef774ed71f9bfbba85bd9680623489a5e9893c942b7d2490051465d66b92932492eb8ec39f7d5a4b432
6
+ metadata.gz: 90b739b20c70f4ee18fdde1704d7bed69e7cc0fbe45f948cdee8fd0e6f0ad1e7b48dfdc36a356af0def8831c0b490c2865ad38861d660d8c02b57734209c3f13
7
+ data.tar.gz: d01ff80fcd31819a6b8a098b4201cfa5a291878d5c8311c81f98eecd55d9a02feb9c82efad44ec51a1dd5d876372e754e02bd0e9856d80576d1eacc257d38b73
@@ -209,7 +209,62 @@ public class FileWriterWorker
209
209
  foreach (var projectDiscovery in orderedProjectDiscovery)
210
210
  {
211
211
  var projectFullPath = Path.Join(repoContentsPath.FullName, initialDiscoveryResult.Path, projectDiscovery.FilePath).FullyNormalizedRootedPath();
212
- var updatedFiles = await TryPerformFileWritesAsync(_fileWriter, repoContentsPath, initialProjectDirectory, projectDiscovery, resolvedDependencies.Value);
212
+ var projectDirectory = new DirectoryInfo(Path.GetDirectoryName(projectFullPath)!);
213
+ var projectRelativePath = Path.GetRelativePath(repoContentsPath.FullName, projectFullPath).FullyNormalizedRootedPath();
214
+ var projectRelativeDirectory = Path.GetDirectoryName(projectRelativePath)!.NormalizePathToUnix();
215
+ _logger.Info($"Attempting to update {dependencyName} for {projectRelativePath}");
216
+
217
+ // rerun discovery because a previous file update may have already fixed this
218
+ var rerunWorkspaceDiscovery = await _discoveryWorker.RunAsync(repoContentsPath.FullName, projectRelativeDirectory);
219
+ var rerunProjectDiscovery = rerunWorkspaceDiscovery.GetProjectDiscoveryFromFullPath(repoContentsPath, new FileInfo(projectFullPath));
220
+ if (rerunProjectDiscovery is null)
221
+ {
222
+ _logger.Warn($" Unable to re-run project discovery for project {projectRelativePath}.");
223
+ continue;
224
+ }
225
+
226
+ var candidateDependencyToUpdate = rerunProjectDiscovery.Dependencies.FirstOrDefault(d => d.Name.Equals(dependencyName, StringComparison.OrdinalIgnoreCase));
227
+ if (candidateDependencyToUpdate?.Version is null)
228
+ {
229
+ _logger.Warn($" Unable to find dependency after discovery rerun.");
230
+ continue;
231
+ }
232
+
233
+ if (!NuGetVersion.TryParse(candidateDependencyToUpdate.Version, out var candidateDependencyCurrentVersion))
234
+ {
235
+ _logger.Warn($" Unable to parse discovered version number from string: {candidateDependencyToUpdate.Version}");
236
+ continue;
237
+ }
238
+
239
+ if (candidateDependencyCurrentVersion >= newDependencyVersion)
240
+ {
241
+ _logger.Info($" Dependency is already up to date at version {candidateDependencyCurrentVersion}, possibly from a previous operation.");
242
+ continue;
243
+ }
244
+
245
+ var rerunTopLevelDependencies = rerunProjectDiscovery.Dependencies
246
+ .Where(d => !d.IsTransitive)
247
+ .ToImmutableArray();
248
+ var rerunDesiredDependencies = rerunTopLevelDependencies.Any(d => d.Name.Equals(dependencyName, StringComparison.OrdinalIgnoreCase))
249
+ ? rerunTopLevelDependencies.Select(d => d.Name.Equals(dependencyName, StringComparison.OrdinalIgnoreCase) ? newDependency : d).ToImmutableArray()
250
+ : rerunTopLevelDependencies.Concat([newDependency]).ToImmutableArray();
251
+ var resolvedDependenciesInThisproject = await _dependencySolver.SolveAsync(rerunTopLevelDependencies, rerunDesiredDependencies, targetFramework);
252
+ if (resolvedDependenciesInThisproject is null)
253
+ {
254
+ _logger.Warn($" Unable to solve dependency conflicts for {projectRelativePath}/{targetFramework}.");
255
+ continue;
256
+ }
257
+
258
+ var updatedFiles = await TryPerformFileWritesAsync(_fileWriter, repoContentsPath, projectDirectory, rerunProjectDiscovery!, resolvedDependenciesInThisproject.Value);
259
+ if (updatedFiles.Length == 0)
260
+ {
261
+ _logger.Info(" Files were unable to be updated.");
262
+ }
263
+ else
264
+ {
265
+ _logger.Info($" Successfully updated the following files: {string.Join(", ", updatedFiles)}");
266
+ }
267
+
213
268
  allUpdatedFiles.AddRange(updatedFiles);
214
269
  }
215
270
 
@@ -812,10 +812,12 @@ public class FileWriterWorkerTests : TestBase
812
812
  discoveryWorker: new TestDiscoveryWorker(args =>
813
813
  {
814
814
  discoveryRequestCount++;
815
- var result = discoveryRequestCount switch
815
+ if (discoveryRequestCount <= 3)
816
816
  {
817
- // initial request, report 1.0.0
818
- 1 => new WorkspaceDiscoveryResult()
817
+ // 1 - initial request
818
+ // 2 - pre-edit request
819
+ // 3 - post-edit request - no change made, indicates failure
820
+ return Task.FromResult(new WorkspaceDiscoveryResult()
819
821
  {
820
822
  Path = "/",
821
823
  Projects = [
@@ -829,26 +831,10 @@ public class FileWriterWorkerTests : TestBase
829
831
  ReferencedProjectPaths = []
830
832
  }
831
833
  ]
832
- },
833
- // post-edit request, report 1.0.0 again, indicating the file edits didn't produce the desired result
834
- 2 => new WorkspaceDiscoveryResult()
835
- {
836
- Path = "/",
837
- Projects = [
838
- new ProjectDiscoveryResult()
839
- {
840
- FilePath = "project.csproj",
841
- Dependencies = [new Dependency("Some.Dependency", "1.0.0", DependencyType.PackageReference)],
842
- TargetFrameworks = ["net9.0"],
843
- AdditionalFiles = [],
844
- ImportedFiles = [],
845
- ReferencedProjectPaths = []
846
- }
847
- ]
848
- },
849
- _ => throw new NotSupportedException($"Didn't expect {discoveryRequestCount} discovery requests"),
850
- };
851
- return Task.FromResult(result);
834
+ });
835
+ }
836
+
837
+ throw new NotSupportedException($"Didn't expect {discoveryRequestCount} discovery requests");
852
838
  }),
853
839
  dependencySolver: null, // use real worker
854
840
  fileWriter: null, // use real worker
@@ -867,6 +853,80 @@ public class FileWriterWorkerTests : TestBase
867
853
  );
868
854
  }
869
855
 
856
+ [Fact]
857
+ public async Task EndToEnd_PriorFileEditResolvedDependencyInSubsequentFile()
858
+ {
859
+ // via a ProjectReference, two projects have the same dependency and updating the root causes the other dependency to also be updated and not result in unnecessarily pinning anything
860
+ await TestAsync(
861
+ dependencyName: "Some.Dependency",
862
+ oldDependencyVersion: "1.0.0",
863
+ newDependencyVersion: "2.0.0",
864
+ files: [
865
+ ("src/a/a.csproj", """
866
+ <Project Sdk="Microsoft.NET.Sdk">
867
+ <PropertyGroup>
868
+ <TargetFramework>net9.0</TargetFramework>
869
+ </PropertyGroup>
870
+ <ItemGroup>
871
+ <ProjectReference Include="..\b\b.csproj" />
872
+ </ItemGroup>
873
+ <ItemGroup>
874
+ <PackageReference Include="Unrelated.Dependency" Version="3.0.0" />
875
+ </ItemGroup>
876
+ </Project>
877
+ """),
878
+ ("src/b/b.csproj", """
879
+ <Project Sdk="Microsoft.NET.Sdk">
880
+ <PropertyGroup>
881
+ <TargetFramework>net9.0</TargetFramework>
882
+ </PropertyGroup>
883
+ <ItemGroup>
884
+ <PackageReference Include="Some.Dependency" Version="1.0.0" />
885
+ </ItemGroup>
886
+ </Project>
887
+ """),
888
+ ("Directory.Build.props", "<Project />"),
889
+ ("Directory.Build.targets", "<Project />"),
890
+ ],
891
+ packages: [
892
+ MockNuGetPackage.CreateSimplePackage("Some.Dependency", "1.0.0", "net9.0"),
893
+ MockNuGetPackage.CreateSimplePackage("Some.Dependency", "2.0.0", "net9.0"),
894
+ MockNuGetPackage.CreateSimplePackage("Unrelated.Dependency", "3.0.0", "net9.0"),
895
+ ],
896
+ discoveryWorker: null, // use real worker
897
+ dependencySolver: null, // use real worker
898
+ fileWriter: null, // use real worker
899
+ expectedFiles: [
900
+ ("src/a/a.csproj", """
901
+ <Project Sdk="Microsoft.NET.Sdk">
902
+ <PropertyGroup>
903
+ <TargetFramework>net9.0</TargetFramework>
904
+ </PropertyGroup>
905
+ <ItemGroup>
906
+ <ProjectReference Include="..\b\b.csproj" />
907
+ </ItemGroup>
908
+ <ItemGroup>
909
+ <PackageReference Include="Unrelated.Dependency" Version="3.0.0" />
910
+ </ItemGroup>
911
+ </Project>
912
+ """),
913
+ ("src/b/b.csproj", """
914
+ <Project Sdk="Microsoft.NET.Sdk">
915
+ <PropertyGroup>
916
+ <TargetFramework>net9.0</TargetFramework>
917
+ </PropertyGroup>
918
+ <ItemGroup>
919
+ <PackageReference Include="Some.Dependency" Version="2.0.0" />
920
+ </ItemGroup>
921
+ </Project>
922
+ """),
923
+ ],
924
+ expectedOperations: [
925
+ new PinnedUpdate() { DependencyName = "Some.Dependency", NewVersion = NuGetVersion.Parse("2.0.0"), UpdatedFiles = ["/src/b/b.csproj"] }
926
+ ]
927
+ );
928
+ }
929
+
870
930
  private static async Task TestAsync(
871
931
  string dependencyName,
872
932
  string oldDependencyVersion,
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.345.0
4
+ version: 0.346.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dependabot
@@ -15,14 +15,14 @@ dependencies:
15
15
  requirements:
16
16
  - - '='
17
17
  - !ruby/object:Gem::Version
18
- version: 0.345.0
18
+ version: 0.346.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.345.0
25
+ version: 0.346.0
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: debug
28
28
  requirement: !ruby/object:Gem::Requirement
@@ -551,7 +551,7 @@ licenses:
551
551
  - MIT
552
552
  metadata:
553
553
  bug_tracker_uri: https://github.com/dependabot/dependabot-core/issues
554
- changelog_uri: https://github.com/dependabot/dependabot-core/releases/tag/v0.345.0
554
+ changelog_uri: https://github.com/dependabot/dependabot-core/releases/tag/v0.346.0
555
555
  rdoc_options: []
556
556
  require_paths:
557
557
  - lib