Merge pull request #11750 from pgavlin/gh11734
[platform/upstream/coreclr.git] / tests / helixperftasks.targets
1 <?xml version="1.0" encoding="utf-8"?>
2 <Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
3
4     <UsingTask TaskName="RemoveDuplicateAssemblies" TaskFactory="CodeTaskFactory" AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll" >
5       <ParameterGroup>
6         <DuplicateAssemblies ParameterType="Microsoft.Build.Framework.ITaskItem[]" Required="true" />
7         <AssemblyPaths ParameterType="Microsoft.Build.Framework.ITaskItem[]" Required="true" />
8         <UniqueAssemblyPaths ParameterType="Microsoft.Build.Framework.ITaskItem[]" Output="true" />
9       </ParameterGroup>
10       <Task>
11         <Using Namespace="System"/>
12         <Using Namespace="System.IO"/>
13         <Using Namespace="System.Collections.Generic"/>
14         <Code Type="Fragment" Language="cs">
15           <![CDATA[
16                   var uniqueAssemblyPathsList = new List<Microsoft.Build.Framework.ITaskItem>();
17                   var dupeSet = new HashSet<string>();
18                   foreach(var dupe in DuplicateAssemblies)
19                   {
20                     dupeSet.Add(dupe.GetMetadata("Identity"));
21                   }
22                   foreach(var assemPath in AssemblyPaths)
23                   {
24                     if((dupeSet.Contains(assemPath.GetMetadata("FileName")+assemPath.GetMetadata("Extension")) &&
25                         !(assemPath.GetMetadata("Identity").StartsWith("runtime"))))
26                     {
27                       Log.LogMessage("Duplicate assembly filtered: {0}", assemPath.GetMetadata("Identity"));
28                     }
29                     else
30                     {
31                       uniqueAssemblyPathsList.Add(assemPath);
32                     }
33
34                   }
35                   UniqueAssemblyPaths = uniqueAssemblyPathsList.ToArray();
36           ]]>
37         </Code>
38       </Task>
39     </UsingTask>
40
41
42   <UsingTask TaskName="GetPerfTestAssemblies" AssemblyFile="$(ToolsDir)net45/Microsoft.DotNet.Build.CloudTestTasks.dll"/>
43   <Import Project="$(ToolsDir)publishtest.targets" />
44   <Import Project="$(ToolsDir)CloudTest.targets" />
45   <Target Name="UploadPerfAssemblies">
46     <Message Text="Searching for Perf tests in $(BinDir)" Importance = "High"/>
47     <ItemGroup>
48       <TestBinary Include="$(BinDir)**/*.dll" />
49       <TestBinary Include="$(BinDir)**/*.exe" />
50     </ItemGroup>
51     <!-- Get full paths to each of the perf test directories -->
52     <GetPerfTestAssemblies TestBinaries="@(TestBinary)" GetFullPaths="true">
53       <Output TaskParameter="PerfTestAssemblies" ItemName="CoreCLRPerfTest" />
54     </GetPerfTestAssemblies>
55
56     <!-- Restore the runtime dependencies -->
57     <Exec Command="$(DotnetRestoreCommand) &quot;$(TestRuntimeProjectJson)&quot;"
58            StandardOutputImportance="Low"
59            CustomErrorRegularExpression="^Unable to resolve .*"
60            IgnoreExitCode="true"
61            IgnoreStandardErrorWarningFormat="true" />
62
63     <!-- For each perf test, generate assembly list, and zip up the workitem -->
64     <MSBuild Projects="$(MSBuildProjectFile)" Properties="CurrPerfAssembly=%(CoreCLRPerfTest.Identity);TestRuntimeProjectLockJson=$(TestRuntimeProjectLockJson)" Targets="_zipSingleProject"/>
65
66     <!-- After all workitems are packaged, call the CloudBuild Targets from Build Tools which upload these workitems and trigger a test run for these workitems -->
67     <MSBuild Projects="$(MSBuildProjectFile)" Properties="BinDir=$(BinDir)../" Targets="CloudBuild" />
68
69   </Target>
70
71   <Target Name="RunTestsForProject">
72     <Message Text="This is a dummy target to appease DependsOnTargets for ArchiveTestBuild in publishtest.targets" Importance="Low" />
73   </Target>
74
75   <!-- CoreCLR builds do not generate dependency lists yet, we need to archive the whole packages dir so that tests can find dependencies -->
76   <!-- compress the required files from the packages dir in preparation for uploading -->
77   <Target Name="CompressPackagesDir">
78     <ItemGroup>
79       <ExcludeFromArchive Include="nupkg$" />
80       <ExcludeFromArchive Include="Microsoft.DotNet.BuildTools" />
81       <ExcludeFromArchive Include="TestData" />
82     </ItemGroup>
83     <ZipFileCreateFromDirectory
84         SourceDirectory="$(PackagesDir)"
85         DestinationArchive="$(PackagesArchiveFile)"
86         ExcludePatterns="@(ExcludeFromArchive)"
87         OverwriteDestination="true" />
88     <ItemGroup>
89       <ForUpload Include="$(PackagesArchiveFile)">
90         <RelativeBlobPath>$(Platform)$(ConfigurationGroup)/$(PackagesArchiveFilename)</RelativeBlobPath>
91       </ForUpload>
92     </ItemGroup>
93   </Target>
94
95   <Target Name="_zipSingleProject">
96     <PropertyGroup>
97       <OutDir>$([System.IO.Path]::GetDirectoryName($(CurrPerfAssembly)))/</OutDir>
98       <TestArchiveDir>$(BaseOutputPath)\testStagingDir\</TestArchiveDir>
99       <TestProjectName>$([System.IO.Path]::GetFileNameWithoutExtension($(CurrPerfAssembly)))</TestProjectName>
100       <ProjectLockJson>$(OutDir)project.lock.json</ProjectLockJson>
101     </PropertyGroup>
102
103     <ItemGroup>
104       <TestNugetProjectLockFile Include="$(ProjectLockJson)" Condition="Exists($(ProjectLockJson))"/>
105       <TestNugetProjectLockFile Include="$(TestRuntimeProjectLockJson)" Condition="Exists($(TestRuntimeProjectLockJson))"/>
106     </ItemGroup>
107
108     <!-- Generate Assembly list based on the individual project's project.json as well as the common runtime dependencies generated by AddAssFilesToAssemblyList target -->
109     <PrereleaseResolveNuGetPackageAssets
110                                AllowFallbackOnTargetSelection="true"
111                                IncludeFrameworkReferences="false"
112                                NuGetPackagesDirectory="$(PackagesDir)"
113                                RuntimeIdentifier="$(TestNugetRuntimeId)"
114                                ProjectLanguage="C#"
115                                ProjectLockFile="%(TestNugetProjectLockFile.FullPath)"
116                                TargetMonikers="@(TestTargetFramework)">
117       <Output TaskParameter="ResolvedCopyLocalItems" ItemName="RequiredAssemblies" />
118     </PrereleaseResolveNuGetPackageAssets>
119
120
121     <ItemGroup>
122       <AssemblyPaths Include="$([MSBuild]::MakeRelative($(PackagesDir), %(RequiredAssemblies.FullPath)))" />
123       <AssemblyFiles Include="@(RequiredAssemblies->'%(FileName)%(Extension)')"></AssemblyFiles>
124       <DupeAssemblies Include="%(AssemblyFiles.Identity)" Condition="'@(AssemblyFiles->Count())' &gt; 1"> </DupeAssemblies>
125     </ItemGroup>
126     <!-- There are duplicate dependency assemblies calculated for some projects that we need to fix, this is check/fix to weed out duplicates -->
127     <RemoveDuplicateAssemblies AssemblyPaths="@(AssemblyPaths)" DuplicateAssemblies="@(DupeAssemblies)">
128       <Output TaskParameter="UniqueAssemblyPaths" ItemName="UniqueAssemblyPaths" />
129     </RemoveDuplicateAssemblies>
130
131     <WriteLinesToFile
132       File="$(OutDir)/assemblylist.flat.txt"
133       Lines="@(UniqueAssemblyPaths)"
134       Overwrite="true"
135       Encoding="Ascii" />
136
137     <GenerateAssemblyList
138       InputListLocation="$(OutDir)assemblylist.flat.txt"
139       OutputListLocation="$(OutDir)assemblylist.txt"
140      />
141
142     <Message Text="Archiving Perf test assemblies for project: $(OutDir)" Importance="High" />
143     <MSBuild Projects="$(MSBuildProjectFile)" Properties="OutDir=$(OutDir);TestArchiveDir=$(TestArchiveDir);TestProjectName=$(TestProjectName)" Targets="ArchiveTestBuild"/>
144   </Target>
145 </Project>