aspnetcore/build/repo.targets

264 lines
12 KiB
XML

<Project>
<Import Project="RepositoryBuild.targets" />
<PropertyGroup>
<NuGetPublishVolatileFeed>https://dotnet.myget.org/F/aspnetcore-volatile-dev/api/v2/package</NuGetPublishVolatileFeed>
<LineupBuildDir>$(ArtifactsDir)lineups\</LineupBuildDir>
<_CloneRepositoryRoot>$(RepositoryRoot).r\</_CloneRepositoryRoot>
<_DependencyBuildDirectory>$(RepositoryRoot).deps\build\</_DependencyBuildDirectory>
<_DependencyPackagesDirectory>$(_DependencyBuildDirectory)</_DependencyPackagesDirectory>
<_RestoreGraphSpecsDirectory>$(IntermediateDir)package-specs\</_RestoreGraphSpecsDirectory>
<_RepositoryListFileName>Repositories.props</_RepositoryListFileName>
<_DefaultRepositoryList>$(MSBuildThisFileDirectory)$(_RepositoryListFileName)</_DefaultRepositoryList>
<_DependencyRepositoryList>$(_DependencyBuildDirectory)$(_RepositoryListFileName)</_DependencyRepositoryList>
<_RepositoryListToImport Condition="Exists('$(_DependencyRepositoryList)')">$(_DependencyRepositoryList)</_RepositoryListToImport>
<_RepositoryListToImport Condition="!Exists('$(_DependencyRepositoryList)')">$(_DefaultRepositoryList)</_RepositoryListToImport>
<_RepositoryBuildTargets Condition="'$(_RepositoryBuildTargets)'=='' AND '$(CompileOnly)'=='true'">/t:Package /t:VerifyPackages</_RepositoryBuildTargets>
<_RepositoryBuildTargets Condition="'$(_RepositoryBuildTargets)'==''">/t:Verify</_RepositoryBuildTargets>
<PrepareDependsOn>$(PrepareDependsOn);CleanUniverseArtifacts</PrepareDependsOn>
<CleanDependsOn>$(CleanDependsOn);CleanUniverseArtifacts</CleanDependsOn>
<BuildDependsOn>$(BuildDependsOn);CloneRepositories;BuildRepositories</BuildDependsOn>
</PropertyGroup>
<Import Project="$(_RepositoryListToImport)" />
<Target Name="CleanUniverseArtifacts">
<RemoveDir Directories="$(_CloneRepositoryRoot)" Condition="Exists('$(_CloneRepositoryRoot)') AND '$(ClearRepositoryCloneRoot)' != 'false'" />
<RemoveDir Directories="$(BuildDir);$(LineupBuildDir);$(IntermediateDir)" />
<MakeDir Directories="$(BuildDir);$(LineupBuildDir)" />
</Target>
<Target Name="GenerateLineup" DependsOnTargets="_GenerateBuildGraph">
<PackNuSpec NuSpecPath="$(MSBuildThisFileDirectory)..\lineups\Internal.AspNetCore.Universe.Lineup.nuspec"
DestinationFolder="$(LineupBuildDir)"
Properties="version=$(Version)"
Dependencies="@(PackagesProduced);@(ExternalDependency)">
<Output TaskParameter="Packages" ItemName="LineupPackage" />
</PackNuSpec>
</Target>
<Target Name="PublishLineupPackage" Condition="'$(PublishPackages)'=='true' AND @(LineupPackage->Count()) != 0" >
<PushNuGetPackages
Packages="@(LineupPackage)"
Feed="$(NuGetPublishVolatileFeed)"
ApiKey="$(APIKey)" />
</Target>
<Target Name="_PrepareRepositories">
<ItemGroup Condition="'$(KOREBUILD_REPOSITORY_INCLUDE)'!=''">
<_RepositoriesToInclude Include="$(KOREBUILD_REPOSITORY_INCLUDE)" />
<Repository
Remove="@(Repository)"
Condition="'@(Repository)'!='@(_RepositoriesToInclude)' AND '%(Identity)'!=''" />
</ItemGroup>
<ItemGroup Condition="'$(KOREBUILD_REPOSITORY_EXCLUDE)'!=''">
<RepositoriesToExclude Include="$(KOREBUILD_REPOSITORY_EXCLUDE)" />
<Repository Remove="@(RepositoriesToExclude)" />
</ItemGroup>
<Error Text="KOREBUILD_REPOSITORY_EXCLUDE AND KOREBUILD_REPOSITORY_INCLUDE are specified."
Condition="'$(KOREBUILD_REPOSITORY_INCLUDE)' != '' AND '$(KOREBUILD_REPOSITORY_EXCLUDE)' != ''" />
<!--
Determine the protocol to clone individual repositories over. Clone repositories over https,
if Universe was cloned over https
-->
<Exec
Command="git config --get remote.origin.url"
ConsoleToMSBuild="true"
WorkingDirectory="$(RepositoryRoot)"
IgnoreExitCode="true">
<Output TaskParameter="ConsoleOutput" PropertyName="UniverseCloneUrl" />
</Exec>
<PropertyGroup>
<_CloneOverHttps>true</_CloneOverHttps>
<_CloneOverHttps Condition="'$(UniverseCloneUrl)' != '' AND !$(UniverseCloneUrl.StartsWith('https'))">false</_CloneOverHttps>
</PropertyGroup>
<ItemGroup>
<Repository Update="%(Identity)" RepositoryPath="$(_CloneRepositoryRoot)%(Identity)" />
<Repository Update="%(Identity)" CloneUrl="git@github.com:aspnet/%(Identity)" Condition="'$(_CloneOverHttps)'!='true'" />
<Repository Update="%(Identity)" CloneUrl="https://github.com/aspnet/%(Identity)" Condition="'$(_CloneOverHttps)'=='true'" />
</ItemGroup>
</Target>
<Target Name="CloneRepositories" DependsOnTargets="_PrepareRepositories">
<ItemGroup>
<_CloneRepository Include="$(MSBuildProjectFullPath)">
<AdditionalProperties>
CloneRepository=%(Repository.Identity);
CloneUrl=%(Repository.CloneUrl);
CloneBranch=%(Repository.Branch);
CloneRepositoryCommit=%(Repository.Commit);
UseGateBranch=$(UseGateBranch)
</AdditionalProperties>
</_CloneRepository>
</ItemGroup>
<Message Text="Using the repository list information from '$(_RepositoryListToImport)' to clone ..." Importance="High" />
<MakeDir Directories="$(_CloneRepositoryRoot)" />
<MSBuild Projects="@(_CloneRepository)"
Targets="_CloneRepository"
BuildInParallel="$(BuildInParallel)" />
</Target>
<Target Name="_CloneRepository">
<PropertyGroup>
<ShallowClone Condition="'$(ShallowClone)'=='' OR '$(CloneRepositoryCommit)'!=''">false</ShallowClone>
<_CloneArguments>git clone --quiet $(CloneUrl) $(CloneRepository)</_CloneArguments>
<_CloneArguments Condition="'$(ShallowClone)'=='true'">$(_CloneArguments) --depth 1</_CloneArguments>
</PropertyGroup>
<Message Text="Cloning $(CloneRepository) ..." Importance="High" />
<Exec
Command="$(_CloneArguments) --branch $(CloneBranch)-gate"
Condition="'$(UseGateBranch)'=='true'"
IgnoreExitCode="true"
IgnoreStandardErrorWarningFormat="true"
WorkingDirectory="$(_CloneRepositoryRoot)">
<Output TaskParameter="ExitCode" PropertyName="GateBranchExitCode" />
</Exec>
<Warning Text="Using $(CloneBranch)-gate for $(CloneRepository)"
Condition="'$(GateBranchExitCode)'=='0'" />
<Exec
Command="$(_CloneArguments) --branch $(CloneBranch)"
Condition="'$(GateBranchExitCode)'!='0'"
WorkingDirectory="$(_CloneRepositoryRoot)"
EnvironmentVariables="GIT_TERMINAL_PROMPT=0"
Timeout="180000" />
<Message Text="Resetting $(CloneRepository) commit to $(CloneRepositoryCommit) ..." Importance="High" Condition="'$(CloneRepositoryCommit)'!=''"/>
<Exec
Command="git reset --quiet --hard $(CloneRepositoryCommit)"
WorkingDirectory="$(_CloneRepositoryRoot)$(CloneRepository)"
Condition="'$(CloneRepositoryCommit)'!=''" />
</Target>
<Target Name="BuildRepositories"
DependsOnTargets="_PrepareRepositories;_CreateRepositoriesListWithCommits;_UpdateNuGetConfig;_GenerateBuildGraph;_BuildRepositories;PublishLineupPackage" />
<Target Name="_PrepareRestoreGraphSpecs" DependsOnTargets="_PrepareRepositories">
<MSBuild Projects="$(MSBuildProjectFullPath)"
Targets="ResolveSolutions"
Properties="RepositoryRoot=$(_CloneRepositoryRoot)%(Repository.Identity)\"
ContinueOnError="WarnAndContinue">
<Output TaskParameter="TargetOutputs" ItemName="Solution" />
</MSBuild>
<Error Text="No solutions were found in '$(_CloneRepositoryRoot)'" Condition="@(Solution->Count()) == 0" />
<ItemGroup>
<Solution>
<AdditionalProperties>RestoreGraphOutputPath=$(_RestoreGraphSpecsDirectory)$([System.IO.Path]::GetFileName('$([System.IO.Path]::GetDirectoryName(%(FullPath)))'))\%(Solution.FileName)%(Solution.Extension).json</AdditionalProperties>
</Solution>
<GraphSpecInputs Include="
@(Solution);
$(_CloneRepositoryRoot)**\*.csproj;
$(_CloneRepositoryRoot)**\dependencies.props" />
<GraphSpecOutputs Include="$(_RestoreGraphSpecsDirectory)%(Solution.Repository)\%(Solution.FileName)%(Solution.Extension).json" />
</ItemGroup>
</Target>
<Target Name="_GenerateRestoreGraphSpecs" DependsOnTargets="_PrepareRestoreGraphSpecs" Inputs="@(GraphSpecInputs)" Outputs="@(GraphSpecOutputs)">
<MSBuild
Projects="@(Solution)"
Targets="GenerateRestoreGraphFile"
Properties="BuildNumber=$(BuildNumber);KoreBuildRestoreTargetsImported=true"
BuildInParallel="$(BuildInParallel)"
ContinueOnError="true" />
</Target>
<Target Name="_GenerateBuildGraph" DependsOnTargets="_GenerateRestoreGraphSpecs">
<RepoTasks.CalculateBuildGraph
Repositories="@(Repository)"
StartGraphAt="$(BuildGraphOf)"
DefaultPackageVersion="$(Version)"
PackageSpecsDirectory="$(_RestoreGraphSpecsDirectory)">
<Output TaskParameter="RepositoriesToBuildInOrder" ItemName="RepositoryToBuildInOrder" />
<Output TaskParameter="PackagesProduced" ItemName="PackagesProduced" />
</RepoTasks.CalculateBuildGraph>
</Target>
<Target Name="_UpdateNuGetConfig">
<UpdatePackageSource
NuGetConfigPath="$(_CloneRepositoryRoot)%(Repository.Identity)\NuGet.config"
SourceName="Dependencies"
SourceUri="$(_DependencyPackagesDirectory)"
Condition="Exists('$(_DependencyPackagesDirectory)')" />
<MakeDir Directories="$(BuildDir)" Condition="!Exists('$(BuildDir)')" />
<UpdatePackageSource
NuGetConfigPath="$(_CloneRepositoryRoot)%(Repository.Identity)\NuGet.config"
SourceName="Artifacts"
SourceUri="$(BuildDir)" />
</Target>
<Target Name="_CreateRepositoriesListWithCommits" DependsOnTargets="_GetRepositoryCommits">
<PropertyGroup>
<RepositoryFileWithCommit>$(BuildDir)$(_RepositoryListFileName)</RepositoryFileWithCommit>
</PropertyGroup>
<Copy
SourceFiles="$(_DefaultRepositoryList)"
DestinationFiles="$(RepositoryFileWithCommit)" />
<XmlPoke
XmlInputPath="$(RepositoryFileWithCommit)"
Query="//Repository[@Include='%(Repository.Identity)']/@Commit"
Value="%(Repository.Commit)" />
<XmlPoke
XmlInputPath="$(RepositoryFileWithCommit)"
Query="//Repository[@Include='%(Repository.Identity)']/@CloneUrl"
Value="%(Repository.CloneUrl)" />
</Target>
<!-- Based on the solution here: http://stackoverflow.com/a/11331566 -->
<Target Name="_GetRepositoryCommits" Outputs="%(Repository.Identity)">
<PropertyGroup>
<!--
Attempt to read environment variables set up by the CI's VCS Root if available.
* BUILD_VCS_URL_<RepositoryName> gives us the clone URL for a repository
* BUILD_VCS_NUMBER_<RepositoryName> gives us the commit hash for a repository.
-->
<_RepositoryName>$([System.String]::new('%(Repository.Identity)').Replace('.', '_'))</_RepositoryName>
<_CloneUrl>$([System.Environment]::GetEnvironmentVariable("BUILD_VCS_URL_$(_RepositoryName)"))</_CloneUrl>
<_CommitHash>$([System.Environment]::GetEnvironmentVariable("BUILD_VCS_NUMBER_$(_RepositoryName)"))</_CommitHash>
</PropertyGroup>
<Warning Text="%(Repository.Identity) has not been cloned."
Condition="!Exists('%(Repository.RepositoryPath)')" />
<GetGitCommitInfo
WorkingDirectory="%(Repository.RepositoryPath)"
Condition="'$(_CommitHash)'=='' AND Exists('%(Repository.RepositoryPath)')">
<Output TaskParameter="CommitHash" PropertyName="_CommitHash" />
</GetGitCommitInfo>
<ItemGroup>
<Repository Update="%(Identity)" Commit="$(_CommitHash)" />
<Repository Update="%(Identity)" CloneUrl="$(_CloneUrl)" Condition="'$(_CloneUrl)'!=''" />
</ItemGroup>
<PropertyGroup>
<_CommitHash></_CommitHash>
<_CloneUrl></_CloneUrl>
</PropertyGroup>
</Target>
</Project>