Skip to content
This repository was archived by the owner on Jan 23, 2023. It is now read-only.

Commit 051442c

Browse files
committed
Use latest dotnet CLI for package testing
Previously we were generating project.json for package tests. This moves us to use CSProj. I've also reorganized the package test directory to make it more xcopy-able. The following hooks enable more granular execution. TestPackage: specify the name of the packages you wish to test. Default is all packages. TargetFrameworksToInclude: specify the TFMs you wish to test. Default is all supported TFMs for each package. RuntimesToInclude: specify a subset of RIDs you wish to test. Default is all compatible RIDs for the given TFM.
1 parent 3e63495 commit 051442c

File tree

3 files changed

+99
-30
lines changed

3 files changed

+99
-30
lines changed

pkg/test/project.csproj.template

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<Project Sdk="Microsoft.NET.Sdk">
2+
3+
<PropertyGroup>
4+
<TargetFramework>{TFM}</TargetFramework>
5+
<RuntimeIdentifiers>{RIDs}</RuntimeIdentifiers>
6+
</PropertyGroup>
7+
8+
<ItemGroup>
9+
<PackageReference Include="{PackageId}" Version="{PackageVersion}" />
10+
</ItemGroup>
11+
12+
</Project>

pkg/test/project.template.json

Lines changed: 0 additions & 11 deletions
This file was deleted.

pkg/test/testPackages.proj

Lines changed: 87 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -5,70 +5,138 @@
55
<ItemGroup>
66
<PackageReports Condition="'$(TestPackage)' == ''" Include="$(PackageReportDir)*.json" />
77
<PackageReports Condition="'$(TestPackage)' != ''" Include="$(PackageReportDir)$(TestPackage).json" />
8+
9+
<!-- support override via commandline -->
10+
<RuntimesToInclude Condition="'$(RuntimesToInclude)' != ''" Include="$(RuntimesToInclude)" />
11+
<TargetFrameworksToInclude Condition="'$(TargetFrameworksToInclude)' != ''" Include="$(TargetFrameworksToInclude)" />
812

913
<!-- restrict restore sources to the current build and publicly shipped packages -->
1014
<RestoreSource Include="$(PackageOutputPath)" />
1115
<RestoreSource Include="https:%2F%2Fapi.nuget.org/v3/index.json" />
1216

1317
<!-- needed for SQLClient's SNI packages -->
1418
<RestoreSource Include="https:%2F%2Fdotnet.myget.org/F/dotnet-core/api/v3/index.json" />
19+
20+
<!-- we don't build alpine or older OSX versions -->
21+
<RuntimesToExclude Include="alpine.3.4.3-x64;osx.10.10-x64;osx.10.11-x64" />
22+
23+
<!-- no targeting pack was ever shipped for net463 -->
24+
<TargetFrameworksToExclude Include="net463" />
1525
</ItemGroup>
1626

1727
<PropertyGroup>
18-
<TestProjectDir>$(PackageOutputPath)projects/</TestProjectDir>
28+
<TestDir>$(PackageOutputPath)test/</TestDir>
29+
<TestToolsDir>$(TestDir)tools/</TestToolsDir>
30+
<TestProjectDir>$(TestDir)projects/</TestProjectDir>
1931
<TestPackageDir>$(BinDir)testPackages</TestPackageDir>
32+
<TestDotNetPath>$(TestToolsDir)/dotnet</TestDotNetPath>
33+
34+
<ProjectTemplate>project.csproj.template</ProjectTemplate>
2035

21-
<TestRestoreCommand>$(DotnetToolCommand)</TestRestoreCommand>
36+
<TestRestoreCommand>$(TestDotNetPath)</TestRestoreCommand>
2237
<TestRestoreCommand>$(TestRestoreCommand) restore</TestRestoreCommand>
2338
<TestRestoreCommand>$(TestRestoreCommand) @(RestoreSource->'-s %(Identity)', ' ')</TestRestoreCommand>
2439
<TestRestoreCommand>$(TestRestoreCommand) --packages "$(TestPackageDir)"</TestRestoreCommand>
40+
2541
</PropertyGroup>
42+
43+
<ItemGroup>
44+
<TestSupportFiles Include="$(DotnetCliPath)\**\*.*">
45+
<DestinationFolder>$(TestToolsDir)%(RecursiveDir)</DestinationFolder>
46+
</TestSupportFiles>
47+
</ItemGroup>
48+
49+
<Target Name="CreateTestDir"
50+
Inputs="@(TestSupportFiles)"
51+
Outputs="@(TestSupportFiles->'%(DestinationFolder)\%(FileName)%(Extension)')">
52+
<MakeDir Directories="%(TestSupportFiles.DestinationFolder)" />
53+
<Copy SourceFiles="@(TestSupportFiles)" DestinationFolder="%(TestSupportFiles.DestinationFolder)" />
54+
</Target>
2655

2756
<Target Name="GetSupportedPackages">
2857
<GetSupportedPackagesFromPackageReports PackageReports="@(PackageReports)">
2958
<Output TaskParameter="SupportedPackages" ItemName="SupportedPackage"/>
3059
</GetSupportedPackagesFromPackageReports>
60+
61+
<ItemGroup>
62+
<SupportedPackage>
63+
<ProjectDir>$(TestProjectDir)%(Identity)/%(TargetFrameworkShort)/</ProjectDir>
64+
</SupportedPackage>
65+
<SupportedPackage>
66+
<ProjectFile>%(ProjectDir)project.csproj</ProjectFile>
67+
<AssetsFile>%(ProjectDir)obj/project.assets.json</AssetsFile>
68+
<SemaphoreFile>%(ProjectDir)project.built.semaphore</SemaphoreFile>
69+
</SupportedPackage>
70+
</ItemGroup>
3171
</Target>
3272

33-
<Target Name="GenerateProjects"
34-
DependsOnTargets="GetSupportedPackages"
35-
Inputs="@(PackageReports)"
36-
Outputs="$(TestProjectDir)%(SupportedPackage.Identity)/%(SupportedPackage.TargetFramework)/project.json">
73+
<Target Name="UpdateTargetFrameworks" AfterTargets="GetSupportedPackages">
3774
<ItemGroup>
38-
<_projectRuntimes Remove="@(_projectRuntimes)" />
39-
<_projectRuntimes Include="%(SupportedPackage.RuntimeIdentifiers)" />
75+
<_supportedPackageByTargetFramework Include="@(SupportedPackage->'%(TargetFrameworkShort)')">
76+
<Original>%(Identity)</Original>
77+
</_supportedPackageByTargetFramework>
78+
79+
<_supportedPackageByTargetFrameworkToRemove Include="@(_supportedPackageByTargetFramework)" Exclude="@(TargetFrameworksToInclude)" Condition="'@(TargetFrameworksToInclude)' != ''" />
80+
<_filteredSupportedPackageByTargetFramework Include="@(_supportedPackageByTargetFramework)" Exclude="@(TargetFrameworksToExclude);@(_supportedPackageByTargetFrameworkToRemove)" />
81+
82+
<SupportedPackage Remove="@(SupportedPackage)" />
83+
<SupportedPackage Include="@(_filteredSupportedPackageByTargetFramework->'%(Original)')" />
84+
</ItemGroup>
85+
</Target>
86+
87+
<Target Name="UpdateRuntimeIdentifiers"
88+
AfterTargets="GetSupportedPackages"
89+
Inputs="%(SupportedPackage.Identity);%(SupportedPackage.TargetFrameworkShort)"
90+
Outputs="unused">
91+
<ItemGroup>
92+
<_supportedPackageRuntimes Remove="@(_supportedPackageRuntimes)" />
93+
<_supportedPackageRuntimes Include="%(SupportedPackage.RuntimeIdentifiers)" />
94+
95+
<_supportedPackageRuntimesToRemove Include="@(_supportedPackageRuntimes)" Exclude="@(RuntimesToInclude)" Condition="'@(RuntimesToInclude)' != ''" />
96+
<_filteredSupportedPackageRuntimes Include="@(_supportedPackageRuntimes)" Exclude="@(RuntimesToExclude);@(_supportedPackageRuntimesToRemove)" />
97+
98+
<SupportedPackage>
99+
<RuntimeIdentifiers>@(_filteredSupportedPackageRuntimes)</RuntimeIdentifiers>
100+
</SupportedPackage>
40101
</ItemGroup>
102+
</Target>
41103

104+
<Target Name="GenerateProjects"
105+
DependsOnTargets="GetSupportedPackages;CreateTestDir"
106+
Inputs="@(PackageReports);$(ProjectTemplate)"
107+
Outputs="%(SupportedPackage.ProjectFile)">
42108
<PropertyGroup>
43-
<_projectDir>$(TestProjectDir)%(SupportedPackage.Identity)/%(SupportedPackage.TargetFramework)/</_projectDir>
44-
<_projectFile>$(_projectDir)project.json</_projectFile>
109+
<_projectDir>%(SupportedPackage.ProjectDir)/</_projectDir>
110+
<_projectFile>%(SupportedPackage.ProjectFile)</_projectFile>
45111
<_packageId>%(SupportedPackage.Identity)</_packageId>
46112
<_packageVersion>%(SupportedPackage.Version)</_packageVersion>
47-
<_projectTFM>%(SupportedPackage.TargetFramework)</_projectTFM>
48-
<_projectRuntimeSection />
49-
<_projectRuntimeSection Condition="'@(_projectRuntimes)' != ''">@(_projectRuntimes->'"%(Identity)": {}', ', ')</_projectRuntimeSection>
113+
<_projectTFM>%(SupportedPackage.TargetFrameworkShort)</_projectTFM>
114+
<_projectRIDs>%(SupportedPackage.RuntimeIdentifiers)</_projectRIDs>
50115
</PropertyGroup>
51116

52117
<MakeDir Directories="$(_projectDir)" />
53118
<!-- Update project.json template -->
54119
<WriteLinesToFile
55120
File="$(_projectFile)"
56-
Lines="$([System.IO.File]::ReadAllText('project.template.json').Replace('{PackageId}', $(_packageId)).Replace('{PackageVersion}', $(_packageVersion)).Replace('{TFM}', $(_projectTFM)).Replace('{RuntimeSection}', $(_projectRuntimeSection)))"
121+
Lines="$([System.IO.File]::ReadAllText('$(ProjectTemplate)').Replace('{PackageId}', $(_packageId)).Replace('{PackageVersion}', $(_packageVersion)).Replace('{TFM}', $(_projectTFM)).Replace('{RIDs}', '$(_projectRIDs)'))"
57122
Overwrite="true" />
58123
<Message Text="Generated $(_projectFile)" />
59124
</Target>
60125

61126
<Target Name="RestoreProjects"
62127
DependsOnTargets="GenerateProjects"
63-
Inputs="$(TestProjectDir)%(SupportedPackage.Identity)/%(SupportedPackage.TargetFramework)/project.json"
64-
Outputs="$(TestProjectDir)%(SupportedPackage.Identity)'%(SupportedPackage.TargetFramework)/project.lock.json">
128+
Inputs="%(SupportedPackage.ProjectFile)"
129+
Outputs="%(SupportedPackage.AssetsFile)">
65130
<PropertyGroup>
66-
<_projectDir>$(TestProjectDir)%(SupportedPackage.Identity)/%(SupportedPackage.TargetFramework)/</_projectDir>
67-
<_projectFile>$(_projectDir)project.json</_projectFile>
131+
<_projectDir>%(SupportedPackage.ProjectDir)/</_projectDir>
132+
<_projectFile>%(SupportedPackage.ProjectFile)</_projectFile>
133+
<_projectAssetsFile>%(SupportedPackage.AssetsFile)</_projectAssetsFile>
68134
</PropertyGroup>
69135

70-
<Message Importance="High" Text="Testing $(_projectFile)" />
136+
<Message Importance="High" Text="Restoring $(_projectFile)" />
71137
<Exec Command="$(TestRestoreCommand) &quot;$(_projectFile)&quot;" StandardOutputImportance="Low" ContinueOnError="ErrorAndContinue" />
138+
<Touch Files="$(_projectAssetsFile)" />
139+
</Target>
72140
</Target>
73141

74142
<Target Name="Build" DependsOnTargets="RestoreProjects" />

0 commit comments

Comments
 (0)