dependabot-nuget 0.293.0 → 0.295.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/helpers/lib/NuGetUpdater/Directory.Packages.props +1 -1
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Analyze/VersionFinder.cs +16 -5
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Discover/DiscoveryWorker.cs +2 -1
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Discover/SdkProjectDiscovery.cs +1 -1
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/ApiModel/Advisory.cs +2 -0
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/RunWorker.cs +190 -130
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Updater/PackageReferenceUpdater.cs +1 -1
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Updater/PackagesConfigUpdater.cs +3 -6
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Utilities/MSBuildHelper.cs +36 -18
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Analyze/AnalyzeWorkerTests.cs +55 -0
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Run/MiscellaneousTests.cs +61 -0
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Run/RunWorkerTests.cs +338 -0
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Run/UpdateAllowedTests.cs +286 -0
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Run/UpdatedDependencyListTests.cs +9 -1
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Utilities/MSBuildHelperTests.cs +88 -2
- metadata +6 -5
@@ -1,3 +1,5 @@
|
|
1
|
+
using System.Text.Json;
|
2
|
+
|
1
3
|
using NuGet.Versioning;
|
2
4
|
|
3
5
|
using NuGetUpdater.Core.Analyze;
|
@@ -29,6 +31,16 @@ public class MiscellaneousTests
|
|
29
31
|
Assert.Equal(expectedRequirementsStrings, actualRequirementsStrings);
|
30
32
|
}
|
31
33
|
|
34
|
+
[Theory]
|
35
|
+
[MemberData(nameof(DependencyInfoFromJobData))]
|
36
|
+
public void DependencyInfoFromJob(Job job, Dependency dependency, DependencyInfo expectedDependencyInfo)
|
37
|
+
{
|
38
|
+
var actualDependencyInfo = RunWorker.GetDependencyInfo(job, dependency);
|
39
|
+
var expectedString = JsonSerializer.Serialize(expectedDependencyInfo, AnalyzeWorker.SerializerOptions);
|
40
|
+
var actualString = JsonSerializer.Serialize(actualDependencyInfo, AnalyzeWorker.SerializerOptions);
|
41
|
+
Assert.Equal(expectedString, actualString);
|
42
|
+
}
|
43
|
+
|
32
44
|
public static IEnumerable<object?[]> RequirementsFromIgnoredVersionsData()
|
33
45
|
{
|
34
46
|
yield return
|
@@ -82,4 +94,53 @@ public class MiscellaneousTests
|
|
82
94
|
}
|
83
95
|
];
|
84
96
|
}
|
97
|
+
|
98
|
+
public static IEnumerable<object[]> DependencyInfoFromJobData()
|
99
|
+
{
|
100
|
+
yield return
|
101
|
+
[
|
102
|
+
// job
|
103
|
+
new Job()
|
104
|
+
{
|
105
|
+
Source = new()
|
106
|
+
{
|
107
|
+
Provider = "github",
|
108
|
+
Repo = "some/repo"
|
109
|
+
},
|
110
|
+
SecurityAdvisories = [
|
111
|
+
new()
|
112
|
+
{
|
113
|
+
DependencyName = "Some.Dependency",
|
114
|
+
AffectedVersions = [Requirement.Parse(">= 1.0.0, < 1.1.0")],
|
115
|
+
PatchedVersions = [Requirement.Parse("= 1.1.0")],
|
116
|
+
UnaffectedVersions = [Requirement.Parse("= 1.2.0")]
|
117
|
+
},
|
118
|
+
new()
|
119
|
+
{
|
120
|
+
DependencyName = "Unrelated.Dependency",
|
121
|
+
AffectedVersions = [Requirement.Parse(">= 1.0.0, < 99.99.99")]
|
122
|
+
}
|
123
|
+
]
|
124
|
+
},
|
125
|
+
// dependency
|
126
|
+
new Dependency("Some.Dependency", "1.0.0", DependencyType.PackageReference),
|
127
|
+
// expectedDependencyInfo
|
128
|
+
new DependencyInfo()
|
129
|
+
{
|
130
|
+
Name = "Some.Dependency",
|
131
|
+
Version = "1.0.0",
|
132
|
+
IsVulnerable = true,
|
133
|
+
IgnoredVersions = [],
|
134
|
+
Vulnerabilities = [
|
135
|
+
new()
|
136
|
+
{
|
137
|
+
DependencyName = "Some.Dependency",
|
138
|
+
PackageManager = "nuget",
|
139
|
+
VulnerableVersions = [Requirement.Parse(">= 1.0.0, < 1.1.0")],
|
140
|
+
SafeVersions = [Requirement.Parse("= 1.1.0"), Requirement.Parse("= 1.2.0")],
|
141
|
+
}
|
142
|
+
]
|
143
|
+
}
|
144
|
+
];
|
145
|
+
}
|
85
146
|
}
|
@@ -1711,6 +1711,344 @@ public class RunWorkerTests
|
|
1711
1711
|
);
|
1712
1712
|
}
|
1713
1713
|
|
1714
|
+
[Fact]
|
1715
|
+
public async Task UpdatePackageWithDifferentVersionsInDifferentDirectories()
|
1716
|
+
{
|
1717
|
+
// this test passes `null` for discovery, analyze, and update workers to fully test the desired behavior
|
1718
|
+
|
1719
|
+
// the same dependency Some.Package is reported for 3 cases:
|
1720
|
+
// library1.csproj - top level dependency, already up to date
|
1721
|
+
// library2.csproj - top level dependency, needs direct update
|
1722
|
+
// library3.csproj - transitive dependency, needs pin
|
1723
|
+
await RunAsync(
|
1724
|
+
experimentsManager: new ExperimentsManager() { UseDirectDiscovery = true },
|
1725
|
+
packages: [
|
1726
|
+
MockNuGetPackage.CreateSimplePackage("Some.Package", "1.0.0", "net8.0"),
|
1727
|
+
MockNuGetPackage.CreateSimplePackage("Some.Package", "2.0.0", "net8.0"),
|
1728
|
+
MockNuGetPackage.CreateSimplePackage("Package.With.Transitive.Dependency", "0.1.0", "net8.0", [(null, [("Some.Package", "1.0.0")])]),
|
1729
|
+
],
|
1730
|
+
job: new Job()
|
1731
|
+
{
|
1732
|
+
AllowedUpdates = [new() { UpdateType = UpdateType.Security }],
|
1733
|
+
SecurityAdvisories =
|
1734
|
+
[
|
1735
|
+
new()
|
1736
|
+
{
|
1737
|
+
DependencyName = "Some.Package",
|
1738
|
+
AffectedVersions = [Requirement.Parse("= 1.0.0")]
|
1739
|
+
}
|
1740
|
+
],
|
1741
|
+
Source = new()
|
1742
|
+
{
|
1743
|
+
Provider = "github",
|
1744
|
+
Repo = "test/repo",
|
1745
|
+
Directory = "/"
|
1746
|
+
}
|
1747
|
+
},
|
1748
|
+
files: [
|
1749
|
+
("dirs.proj", """
|
1750
|
+
<Project>
|
1751
|
+
<ItemGroup>
|
1752
|
+
<ProjectFile Include="library1\library1.csproj" />
|
1753
|
+
<ProjectFile Include="library2\library2.csproj" />
|
1754
|
+
<ProjectFile Include="library3\library3.csproj" />
|
1755
|
+
</ItemGroup>
|
1756
|
+
</Project>
|
1757
|
+
"""),
|
1758
|
+
("Directory.Build.props", "<Project />"),
|
1759
|
+
("Directory.Build.targets", "<Project />"),
|
1760
|
+
("Directory.Packages.props", """
|
1761
|
+
<Project>
|
1762
|
+
<PropertyGroup>
|
1763
|
+
<ManagePackageVersionsCentrally>false</ManagePackageVersionsCentrally>
|
1764
|
+
</PropertyGroup>
|
1765
|
+
</Project>
|
1766
|
+
"""),
|
1767
|
+
("library1/library1.csproj", """
|
1768
|
+
<Project Sdk="Microsoft.NET.Sdk">
|
1769
|
+
<PropertyGroup>
|
1770
|
+
<TargetFramework>net8.0</TargetFramework>
|
1771
|
+
</PropertyGroup>
|
1772
|
+
<ItemGroup>
|
1773
|
+
<PackageReference Include="Some.Package" Version="2.0.0" />
|
1774
|
+
</ItemGroup>
|
1775
|
+
</Project>
|
1776
|
+
"""),
|
1777
|
+
("library2/library2.csproj", """
|
1778
|
+
<Project Sdk="Microsoft.NET.Sdk">
|
1779
|
+
<PropertyGroup>
|
1780
|
+
<TargetFramework>net8.0</TargetFramework>
|
1781
|
+
</PropertyGroup>
|
1782
|
+
<ItemGroup>
|
1783
|
+
<PackageReference Include="Some.Package" Version="1.0.0" />
|
1784
|
+
</ItemGroup>
|
1785
|
+
</Project>
|
1786
|
+
"""),
|
1787
|
+
("library3/library3.csproj", """
|
1788
|
+
<Project Sdk="Microsoft.NET.Sdk">
|
1789
|
+
<PropertyGroup>
|
1790
|
+
<TargetFramework>net8.0</TargetFramework>
|
1791
|
+
</PropertyGroup>
|
1792
|
+
<ItemGroup>
|
1793
|
+
<PackageReference Include="Package.With.Transitive.Dependency" Version="0.1.0" />
|
1794
|
+
</ItemGroup>
|
1795
|
+
</Project>
|
1796
|
+
"""),
|
1797
|
+
],
|
1798
|
+
discoveryWorker: null,
|
1799
|
+
analyzeWorker: null,
|
1800
|
+
updaterWorker: null,
|
1801
|
+
expectedResult: new RunResult()
|
1802
|
+
{
|
1803
|
+
Base64DependencyFiles =
|
1804
|
+
[
|
1805
|
+
new DependencyFile()
|
1806
|
+
{
|
1807
|
+
Directory = "/",
|
1808
|
+
Name = "Directory.Build.props",
|
1809
|
+
Content = Convert.ToBase64String(Encoding.UTF8.GetBytes("<Project />"))
|
1810
|
+
},
|
1811
|
+
new DependencyFile()
|
1812
|
+
{
|
1813
|
+
Directory = "/",
|
1814
|
+
Name = "Directory.Build.targets",
|
1815
|
+
Content = Convert.ToBase64String(Encoding.UTF8.GetBytes("<Project />"))
|
1816
|
+
},
|
1817
|
+
new DependencyFile()
|
1818
|
+
{
|
1819
|
+
Directory = "/",
|
1820
|
+
Name = "Directory.Packages.props",
|
1821
|
+
Content = Convert.ToBase64String(Encoding.UTF8.GetBytes("""
|
1822
|
+
<Project>
|
1823
|
+
<PropertyGroup>
|
1824
|
+
<ManagePackageVersionsCentrally>false</ManagePackageVersionsCentrally>
|
1825
|
+
</PropertyGroup>
|
1826
|
+
</Project>
|
1827
|
+
"""))
|
1828
|
+
},
|
1829
|
+
new DependencyFile()
|
1830
|
+
{
|
1831
|
+
Directory = "/library1",
|
1832
|
+
Name = "library1.csproj",
|
1833
|
+
Content = Convert.ToBase64String(Encoding.UTF8.GetBytes("""
|
1834
|
+
<Project Sdk="Microsoft.NET.Sdk">
|
1835
|
+
<PropertyGroup>
|
1836
|
+
<TargetFramework>net8.0</TargetFramework>
|
1837
|
+
</PropertyGroup>
|
1838
|
+
<ItemGroup>
|
1839
|
+
<PackageReference Include="Some.Package" Version="2.0.0" />
|
1840
|
+
</ItemGroup>
|
1841
|
+
</Project>
|
1842
|
+
"""))
|
1843
|
+
},
|
1844
|
+
new DependencyFile()
|
1845
|
+
{
|
1846
|
+
Directory = "/library2",
|
1847
|
+
Name = "library2.csproj",
|
1848
|
+
Content = Convert.ToBase64String(Encoding.UTF8.GetBytes("""
|
1849
|
+
<Project Sdk="Microsoft.NET.Sdk">
|
1850
|
+
<PropertyGroup>
|
1851
|
+
<TargetFramework>net8.0</TargetFramework>
|
1852
|
+
</PropertyGroup>
|
1853
|
+
<ItemGroup>
|
1854
|
+
<PackageReference Include="Some.Package" Version="1.0.0" />
|
1855
|
+
</ItemGroup>
|
1856
|
+
</Project>
|
1857
|
+
"""))
|
1858
|
+
},
|
1859
|
+
new DependencyFile()
|
1860
|
+
{
|
1861
|
+
Directory = "/library3",
|
1862
|
+
Name = "library3.csproj",
|
1863
|
+
Content = Convert.ToBase64String(Encoding.UTF8.GetBytes("""
|
1864
|
+
<Project Sdk="Microsoft.NET.Sdk">
|
1865
|
+
<PropertyGroup>
|
1866
|
+
<TargetFramework>net8.0</TargetFramework>
|
1867
|
+
</PropertyGroup>
|
1868
|
+
<ItemGroup>
|
1869
|
+
<PackageReference Include="Package.With.Transitive.Dependency" Version="0.1.0" />
|
1870
|
+
</ItemGroup>
|
1871
|
+
</Project>
|
1872
|
+
"""))
|
1873
|
+
}
|
1874
|
+
],
|
1875
|
+
BaseCommitSha = "TEST-COMMIT-SHA",
|
1876
|
+
},
|
1877
|
+
expectedApiMessages: [
|
1878
|
+
new UpdatedDependencyList()
|
1879
|
+
{
|
1880
|
+
Dependencies = [
|
1881
|
+
new()
|
1882
|
+
{
|
1883
|
+
Name = "Some.Package",
|
1884
|
+
Version = "2.0.0",
|
1885
|
+
Requirements = [
|
1886
|
+
new()
|
1887
|
+
{
|
1888
|
+
Requirement = "2.0.0",
|
1889
|
+
File = "/library1/library1.csproj",
|
1890
|
+
Groups = ["dependencies"],
|
1891
|
+
}
|
1892
|
+
]
|
1893
|
+
},
|
1894
|
+
new()
|
1895
|
+
{
|
1896
|
+
Name = "Some.Package",
|
1897
|
+
Version = "1.0.0",
|
1898
|
+
Requirements = [
|
1899
|
+
new()
|
1900
|
+
{
|
1901
|
+
Requirement = "1.0.0",
|
1902
|
+
File = "/library2/library2.csproj",
|
1903
|
+
Groups = ["dependencies"],
|
1904
|
+
}
|
1905
|
+
]
|
1906
|
+
},
|
1907
|
+
new()
|
1908
|
+
{
|
1909
|
+
Name = "Package.With.Transitive.Dependency",
|
1910
|
+
Version = "0.1.0",
|
1911
|
+
Requirements = [
|
1912
|
+
new()
|
1913
|
+
{
|
1914
|
+
Requirement = "0.1.0",
|
1915
|
+
File = "/library3/library3.csproj",
|
1916
|
+
Groups = ["dependencies"],
|
1917
|
+
}
|
1918
|
+
]
|
1919
|
+
},
|
1920
|
+
new()
|
1921
|
+
{
|
1922
|
+
Name = "Some.Package",
|
1923
|
+
Version = "1.0.0",
|
1924
|
+
Requirements = [
|
1925
|
+
new()
|
1926
|
+
{
|
1927
|
+
Requirement = "1.0.0",
|
1928
|
+
File = "/library3/library3.csproj",
|
1929
|
+
Groups = ["dependencies"],
|
1930
|
+
}
|
1931
|
+
]
|
1932
|
+
},
|
1933
|
+
],
|
1934
|
+
DependencyFiles = [
|
1935
|
+
"/Directory.Build.props",
|
1936
|
+
"/Directory.Build.targets",
|
1937
|
+
"/Directory.Packages.props",
|
1938
|
+
"/library1/library1.csproj",
|
1939
|
+
"/library2/library2.csproj",
|
1940
|
+
"/library3/library3.csproj",
|
1941
|
+
],
|
1942
|
+
},
|
1943
|
+
new IncrementMetric()
|
1944
|
+
{
|
1945
|
+
Metric = "updater.started",
|
1946
|
+
Tags = new()
|
1947
|
+
{
|
1948
|
+
["operation"] = "group_update_all_versions"
|
1949
|
+
}
|
1950
|
+
},
|
1951
|
+
new CreatePullRequest()
|
1952
|
+
{
|
1953
|
+
Dependencies = [
|
1954
|
+
new()
|
1955
|
+
{
|
1956
|
+
Name = "Some.Package",
|
1957
|
+
Version = "2.0.0",
|
1958
|
+
Requirements = [
|
1959
|
+
new()
|
1960
|
+
{
|
1961
|
+
Requirement = "2.0.0",
|
1962
|
+
File = "/library2/library2.csproj",
|
1963
|
+
Groups = ["dependencies"],
|
1964
|
+
Source = new()
|
1965
|
+
{
|
1966
|
+
SourceUrl = null,
|
1967
|
+
Type = "nuget_repo",
|
1968
|
+
}
|
1969
|
+
}
|
1970
|
+
],
|
1971
|
+
PreviousVersion = "1.0.0",
|
1972
|
+
PreviousRequirements = [
|
1973
|
+
new()
|
1974
|
+
{
|
1975
|
+
Requirement = "1.0.0",
|
1976
|
+
File = "/library2/library2.csproj",
|
1977
|
+
Groups = ["dependencies"],
|
1978
|
+
}
|
1979
|
+
],
|
1980
|
+
},
|
1981
|
+
new()
|
1982
|
+
{
|
1983
|
+
Name = "Some.Package",
|
1984
|
+
Version = "2.0.0",
|
1985
|
+
Requirements = [
|
1986
|
+
new()
|
1987
|
+
{
|
1988
|
+
Requirement = "2.0.0",
|
1989
|
+
File = "/library3/library3.csproj",
|
1990
|
+
Groups = ["dependencies"],
|
1991
|
+
Source = new()
|
1992
|
+
{
|
1993
|
+
SourceUrl = null,
|
1994
|
+
Type = "nuget_repo",
|
1995
|
+
}
|
1996
|
+
}
|
1997
|
+
],
|
1998
|
+
PreviousVersion = "1.0.0",
|
1999
|
+
PreviousRequirements = [
|
2000
|
+
new()
|
2001
|
+
{
|
2002
|
+
Requirement = "1.0.0",
|
2003
|
+
File = "/library3/library3.csproj",
|
2004
|
+
Groups = ["dependencies"],
|
2005
|
+
}
|
2006
|
+
],
|
2007
|
+
},
|
2008
|
+
],
|
2009
|
+
UpdatedDependencyFiles = [
|
2010
|
+
new()
|
2011
|
+
{
|
2012
|
+
Directory = "/library2",
|
2013
|
+
Name = "library2.csproj",
|
2014
|
+
Content = """
|
2015
|
+
<Project Sdk="Microsoft.NET.Sdk">
|
2016
|
+
<PropertyGroup>
|
2017
|
+
<TargetFramework>net8.0</TargetFramework>
|
2018
|
+
</PropertyGroup>
|
2019
|
+
<ItemGroup>
|
2020
|
+
<PackageReference Include="Some.Package" Version="2.0.0" />
|
2021
|
+
</ItemGroup>
|
2022
|
+
</Project>
|
2023
|
+
"""
|
2024
|
+
},
|
2025
|
+
new()
|
2026
|
+
{
|
2027
|
+
Directory = "/library3",
|
2028
|
+
Name = "library3.csproj",
|
2029
|
+
Content = """
|
2030
|
+
<Project Sdk="Microsoft.NET.Sdk">
|
2031
|
+
<PropertyGroup>
|
2032
|
+
<TargetFramework>net8.0</TargetFramework>
|
2033
|
+
</PropertyGroup>
|
2034
|
+
<ItemGroup>
|
2035
|
+
<PackageReference Include="Package.With.Transitive.Dependency" Version="0.1.0" />
|
2036
|
+
<PackageReference Include="Some.Package" Version="2.0.0" />
|
2037
|
+
</ItemGroup>
|
2038
|
+
</Project>
|
2039
|
+
"""
|
2040
|
+
}
|
2041
|
+
],
|
2042
|
+
BaseCommitSha = "TEST-COMMIT-SHA",
|
2043
|
+
CommitMessage = "TODO: message",
|
2044
|
+
PrTitle = "TODO: title",
|
2045
|
+
PrBody = "TODO: body"
|
2046
|
+
},
|
2047
|
+
new MarkAsProcessed("TEST-COMMIT-SHA")
|
2048
|
+
]
|
2049
|
+
);
|
2050
|
+
}
|
2051
|
+
|
1714
2052
|
private static async Task RunAsync(Job job, TestFile[] files, IDiscoveryWorker? discoveryWorker, IAnalyzeWorker? analyzeWorker, IUpdaterWorker? updaterWorker, RunResult expectedResult, object[] expectedApiMessages, MockNuGetPackage[]? packages = null, ExperimentsManager? experimentsManager = null, string? repoContentsPath = null)
|
1715
2053
|
{
|
1716
2054
|
// arrange
|