Xamarin Public Jenkins (auto-signing) 7d7f676260 Imported Upstream version 5.16.0.100
Former-commit-id: 38faa55fb9669e35e7d8448b15c25dc447f25767
2018-08-07 15:19:03 +00:00

168 lines
11 KiB
XML

<Project ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />
<!-- CoreFX-Specific Helix test submission project.
TODOS:
- Add support for storing test-project-specific timeouts, use this instead of default if available
-->
<UsingTask TaskName="SimulateHelixExecution" AssemblyFile="$(BuildToolsTaskDir)Microsoft.DotNet.Build.CloudTestTasks.dll"/>
<UsingTask TaskName="ZipFileCreateFromDirectory" AssemblyFile="$(BuildToolsTaskDir)Microsoft.DotNet.Build.Tasks.dll"/>
<PropertyGroup>
<!-- Workaround for dealing with building on Linux/OSX.
It doesn't seem possible to pass a connection string on the command line, as it contains ';' characters.
Checking for the existence of a connection string will happen inside CloudTest.Helix.targets -->
<CloudDropConnectionString Condition="'$(CloudDropConnectionString)'==''" >DefaultEndpointsProtocol=https;AccountName=$(CloudDropAccountName);AccountKey=$(CloudDropAccessToken);EndpointSuffix=core.windows.net</CloudDropConnectionString>
<CloudResultsConnectionString Condition="'$(CloudResultsConnectionString)'==''">DefaultEndpointsProtocol=https;AccountName=$(CloudResultsAccountName);AccountKey=$(CloudResultsAccessToken);EndpointSuffix=core.windows.net</CloudResultsConnectionString>
<!-- Set this to true to simulate Helix execution. Will fail if Python 2.7.X is unavailable
We'll also opportunistically set SkipSendToHelix true here, since if the user is doing
local execution they likely don't want to run in the cloud. -->
<LocalHelixExecution>false</LocalHelixExecution>
<SkipSendToHelix Condition="'$(LocalHelixExecution)'=='true'">true</SkipSendToHelix>
<!-- Indicates that commands will use ScriptRunner.py. This requires:
- Command must produce testResults.xml on successful execution.
- Command is expressed in terms of an .SH file if on *Nix -->
<UseScriptRunner>true</UseScriptRunner>
<!-- For Windows ARM & ARM64 UAPAOT runs, we'll need a special runner that knows how to do this (TODO: Combine the runners) -->
<UseContinuationRunner Condition="'$(ArchGroup)'=='arm' AND '$(TargetGroup)'=='uapaot'">true</UseContinuationRunner>
<SecondaryPayloadDir Condition="'$(ArchGroup)'=='arm' AND '$(TargetGroup)'=='uapaot'">%HELIX_WORKITEM_PAYLOAD%\native</SecondaryPayloadDir>
<!-- Test builds consist of the tests that are platform specific in one root, plus others in AnyOS. -->
<AnyOSPlatformConfig>AnyOS.AnyCPU.$(ConfigurationGroup)</AnyOSPlatformConfig>
<AnyOsArchivesRoot>$(TestWorkingDir)$(AnyOSPlatformConfig)/archive/</AnyOsArchivesRoot>
<AnyOSTestArchivesRoot>$(AnyOsArchivesRoot)tests/</AnyOSTestArchivesRoot>
<!-- Additionally, *NIX variations may need to include their own root folders -->
<UnixPlatformConfig>Unix.$(Platform).$(ConfigurationGroup)</UnixPlatformConfig>
<UnixArchivesRoot>$(TestWorkingDir)$(UnixPlatformConfig)/archive/</UnixArchivesRoot>
<UnixTestArchivesRoot>$(UnixArchivesRoot)tests/</UnixTestArchivesRoot>
<!-- Finally, these archives represent the zips of tests that are OSPlatform specific
This is used by CloudTest.Helix.Targets to generate relative blob paths for archives. -->
<ArchivesRoot>$(TestWorkingDir)$(OSPlatformConfig)/archive/</ArchivesRoot>
<TestArchivesRoot>$(ArchivesRoot)tests/</TestArchivesRoot>
<!-- test-runtime-*.zip is the new-for-.NET-Core-2.0 way to pass along the runtime -->
<TestRuntimeArchiveFilename>test-runtime-$(BuildConfiguration).zip</TestRuntimeArchiveFilename>
<TestRuntimeArchiveFile>$(ArchivesRoot)$(TestRuntimeArchiveFilename)</TestRuntimeArchiveFile>
<RunnerScript Condition="'$(RunnerScript)' == ''">$(TestRunnerScript)</RunnerScript>
<SupplementalPayloadDir Condition="'$(SupplementalPayloadDir)' == ''">$(TestWorkingDir)SupplementalPayload/</SupplementalPayloadDir>
<!-- The old CloudTest.targets forced a single timeout value onto every test -->
<!-- Possible TODO: With the CloudTest.Helix.targets refactor, we have the ability to specify variable timeout-->
<TimeoutInSeconds Condition="'$(TimeoutInSeconds)' == ''">600</TimeoutInSeconds>
<!-- Set required properties for Helix Submission -->
<IsOfficial Condition="'$(OfficialBuildId)'!=''">true</IsOfficial>
<CurrentDate>$([System.DateTime]::Now.ToString(yyyyMMdd.mmss))</CurrentDate>
<HelixJobType Condition="'$(HelixJobType)'==''">test/functional/cli/</HelixJobType>
<!-- Detect whether we are on a product construction build via ProductBuildId. If so, set source appropriately -->
<HelixSource Condition="'$(HelixSource)'=='' And '$(IsOfficial)'!='' And '$(TestProduct)'!='' And '$(Branch)'!='' And '$(ProductBuildId)'!=''">prodcon/$(TestProduct)/$(Branch)/</HelixSource>
<HelixSource Condition="'$(HelixSource)'=='' And '$(IsOfficial)'!='' And '$(TestProduct)'!='' And '$(Branch)'!=''">official/$(TestProduct)/$(Branch)/</HelixSource>
<HelixSource Condition="'$(HelixSource)'=='' And '$(IsOfficial)'=='' And '$(TestProduct)'!='' And '$(Branch)'!=''">pr/$(TestProduct)/$(Branch)/</HelixSource>
<HelixSource Condition="'$(HelixSource)'==''">pr/unknown/</HelixSource>
<!-- Local path for storing submission-related files -->
<HelixLogFolder>$(ArchivesRoot)</HelixLogFolder>
<!-- Properties used for submission by CloudTest.Helix.Targets-->
<BuildMoniker>$(CurrentDate)</BuildMoniker>
<BuildMoniker Condition="'$(IsOfficial)'=='true' And '$(ProductBuildId)'==''">$(OfficialBuildId)</BuildMoniker>
<BuildMoniker Condition="'$(IsOfficial)'=='true' And '$(ProductBuildId)'!=''">$(ProductBuildId)</BuildMoniker>
<HelixArchLabel>$(ArchGroup)</HelixArchLabel>
<HelixConfigLabel>$(ConfigurationGroup)</HelixConfigLabel>
</PropertyGroup>
<Target Name="CoreFXPreCloudBuild" >
<!-- Put anything you want to do before submitting the general purpose helix job here.
Helix requires properly formatted work items and accessible zip files / others to upload, which we'll construct here. -->
<!-- Gather the test archives for this build
If you change binplacing behavior and official runs break,
this is a good place to check.-->
<Message Text="Using OS-Specific test archives from: $(TestArchivesRoot)" />
<Message Text="Using AnyOS test archives from: $(AnyOSTestArchivesRoot)" />
<Message Condition="'$(TargetsUnix)' == 'true'" Text="Using Unix test archives from: $(UnixTestArchivesRoot)" />
<ItemGroup>
<HelixWorkItem Include="$(TestArchivesRoot)**/*.zip" />
<HelixWorkItem Include="$(AnyOSTestArchivesRoot)**/*.zip" />
<!-- Only include Unix folders if supported by the target OS -->
<HelixWorkItem Condition="'$(TargetsUnix)' == 'true'" Include="$(UnixTestArchivesRoot)**/*.zip" />
</ItemGroup>
<Message Text="Full test archive collection : @(HelixWorkItem)" Importance="Low" />
<!-- Verify the test archives exist.
NOTE: It may be better to make this an error, but in the past we chose not to as this causes a build break when triggered, versus just no tests run. -->
<Warning Condition="'@(HelixWorkItem->Count())' == '0'" Text="Didn't find any test archives in supplied folders!!! Review logs to see where test archive(s) were placed and fix." />
<ItemGroup>
<HelixWorkItem>
<Command Condition="'$(TargetsWindows)' == 'true'">RunTests.cmd %HELIX_CORRELATION_PAYLOAD%</Command>
<Command Condition="'$(TargetsWindows)' != 'true'">RunTests.sh $HELIX_CORRELATION_PAYLOAD</Command>
<PayloadFile>%(Identity)</PayloadFile>
<WorkItemId>%(Filename)</WorkItemId>
<TimeoutInSeconds>$(TimeoutInSeconds)</TimeoutInSeconds>
<RelativeBlobPath>$(Platform)-$(ConfigurationGroup)/Tests/$([System.String]::Copy('%(RecursiveDir)').Replace('\', '/'))%(Filename)%(Extension)</RelativeBlobPath>
</HelixWorkItem>
</ItemGroup>
</Target>
<!-- Zips up the runtime directory; unzip location of this file will be used as the first argument to RunTests.cmd/sh. -->
<Target Name="CompressRuntimeDir" Condition="'$(SkipArchive)' != 'true'">
<ZipFileCreateFromDirectory
SourceDirectory="$(TestHostRootPath)"
DestinationArchive="$(TestRuntimeArchiveFile)"
OverwriteDestination="true" />
<ItemGroup>
<HelixCorrelationPayloadFile Include="$(TestRuntimeArchiveFile)">
<RelativeBlobPath>$(Platform)$(ConfigurationGroup)/$(TestRuntimeArchiveFilename)</RelativeBlobPath>
</HelixCorrelationPayloadFile>
</ItemGroup>
</Target>
<!-- Import this at the end so that it can compose properties as needed -->
<Import Project="$(ToolsDir)CloudTest.Helix.targets" />
<!-- main Entrypoint -->
<Target Name="Build">
<Message Text="CoreFX-specific Helix test upload project, beginning submission to Helix" />
<Message Condition="'$(EnableCloudTest)' == 'false'" Text="... will skip upload / submission due to property 'EnableCloudTest' being set to 'false'" />
<Message Condition="'$(SkipSendToHelix)' == 'true'" Text="... will skip submission due to property 'SkipSendToHelix' being set to 'true'" />
<CallTarget Condition="'$(EnableCloudTest)' != 'false'" Targets="CoreFXPreCloudBuild;CompressRuntimeDir;HelixCloudBuild" />
<CallTarget Condition="'$(LocalHelixExecution)' == 'true'" Targets="ExecuteLocally" />
</Target>
<!-- Local Execution entrypoint, can be invoked directly -->
<!-- Sample direct command line:
msbuild upload-tests.proj /t:ExecuteLocally /p:LocalExecutionTestList=C:\GIT\corefx\bin\tests\Windows_NT.AnyCPU.Release\archive\TestList.json
/p:LocalExecutionTestFilter=System.IO
-->
<Target Name="ExecuteLocally">
<PropertyGroup>
<LocalExecutionTestList Condition="'$(LocalExecutionTestList)'==''">$(HelixLogFolder)$(TestListFilename)</LocalExecutionTestList>
<LocalExecutionCorrelationId Condition="'$(LocalExecutionCorrelationId)'==''"></LocalExecutionCorrelationId>
<LocalExecutionFolder Condition="'$(LocalExecutionFolder)'==''">HelixLocalExecution</LocalExecutionFolder>
<LocalExecutionTestFilter Condition="'$(LocalExecutionTestFilter)'==''"></LocalExecutionTestFilter>
</PropertyGroup>
<Message Text="Test List: $(LocalExecutionTestList)" />
<Message Text="Execution Folder: $(LocalExecutionFolder)" />
<Message Text="Test Filter: $(LocalExecutionTestFilter)" />
<SimulateHelixExecution JobList="$(LocalExecutionTestList)"
WorkItemExecutionFilter="$(LocalExecutionTestFilter)"
ExecutionFolder="$(LocalExecutionFolder)"
CorrelationId="$(LocalExecutionCorrelationId)">
<Output TaskParameter="ExecutionLogs" ItemName="LocalExecutionLogs"/>
</SimulateHelixExecution>
<Message Text="Execution complete.%0aLogs:%0a" />
<Message Text="Work Item:%(LocalExecutionLogs.WorkItemFriendlyName)%0a@(LocalExecutionLogs, '%0a')%0a" />
</Target>
</Project>