aspnetcore/build/repo.targets

217 lines
8.7 KiB
XML

<Project>
<PropertyGroup>
<NuGetPublishVolatileFeed>https://dotnet.myget.org/F/aspnetcore-volatile-dev/api/v2/package</NuGetPublishVolatileFeed>
<_BuildGraphFile>$(BuildDir)BuildGraph.proj</_BuildGraphFile>
<_CloneRepositoryRoot>$(RepositoryRoot).r\</_CloneRepositoryRoot>
<_DependencyBuildDirectory>$(RepositoryRoot).deps\build\</_DependencyBuildDirectory>
<_DependencyPackagesDirectory>$(_DependencyBuildDirectory)</_DependencyPackagesDirectory>
<_RepositoryListFileName>Repositories.props</_RepositoryListFileName>
<_DependencyRepositoryList>$(_DependencyBuildDirectory)$(_RepositoryListFileName)</_DependencyRepositoryList>
<_RestoreGraphSpecsDirectory>$(RepositoryRoot)obj\package-specs\</_RestoreGraphSpecsDirectory>
<_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="$(_DependencyRepositoryList)"
Condition="Exists('$(_DependencyRepositoryList)')" />
<Import
Project="$(_RepositoryListFileName)"
Condition="!Exists('$(_DependencyRepositoryList)')" />
<Target Name="CleanUniverseArtifacts">
<RemoveDir Directories="$(RepositoryRoot)obj" Condition="Exists('$(RepositoryRoot)obj')" />
<RemoveDir Directories="$(_CloneRepositoryRoot)" Condition="Exists('$(_CloneRepositoryRoot)')" />
</Target>
<Target Name="_FilterRepositories">
<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)' != ''" />
<Message Text="%(Repository.CloneUrl)" />
</Target>
<Target Name="CloneRepositories" DependsOnTargets="_FilterRepositories">
<ItemGroup>
<_CloneRepository Include="$(MSBuildProjectFullPath)">
<AdditionalProperties>
CloneRepository=%(Repository.Identity);
CloneUrl=%(Repository.CloneUrl);
CloneBranch=%(Repository.Branch);
CloneRepositoryCommit=%(Repository.Commit);
UseGateBranch=$(UseGateBranch)
</AdditionalProperties>
</_CloneRepository>
</ItemGroup>
<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)</_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)" />
<Exec
Command="git reset --quiet --hard $(CloneRepositoryCommit)"
WorkingDirectory="$(_CloneRepositoryRoot)$(CloneRepository)"
Condition="'$(CloneRepositoryCommit)'!=''" />
</Target>
<Target Name="BuildRepositories"
DependsOnTargets="_FilterRepositories;_FindDotNetPath;_GenerateRestoreGraphSpecs;_GenerateBuildGraph;_UpdateNuGetConfig;_CreateRepositoriesListWithCommits">
<PropertyGroup>
<_BuildRepositoryProperties>
UniverseBuildDir=$(BuildDir);
BuildInParallel=$(BuildInParallel);
BuildNumber=$(BuildNumber);
Configuration=$(Configuration);
DotNetPath=$(DotNetPath);
KoreBuildDirectory=$(MSBuildProjectDirectory)\;
KoreBuildProject=$(MSBuildProjectFile);
RepositoryRoot=$(RepositoryRoot);
_BuildGraphFile=$(_BuildGraphFile);
_CloneRepositoryRoot=$(_CloneRepositoryRoot);
_DependencyPackagesDirectory=$(_DependencyPackagesDirectory);
_RepositoryBuildTargets=$(_RepositoryBuildTargets);
_RestoreGraphSpecsDirectory=$(_RestoreGraphSpecsDirectory)
</_BuildRepositoryProperties>
<_BuildRepositoryProperties Condition="'$(PublishPackages)'=='true'">
$(_BuildRepositoryProperties);
APIKey=$(APIKey)
NuGetPublishVolatileFeed=$(NuGetPublishVolatileFeed);
PublishPackages=$(PublishPackages)
</_BuildRepositoryProperties>
</PropertyGroup>
<MSBuild
Projects="$(MSBuildThisFileDirectory)RepositoryBuild.targets"
Targets="BuildRepositories"
Properties="$(_BuildRepositoryProperties)" />
</Target>
<Target Name="_GenerateRestoreGraphSpecs" DependsOnTargets="_FindDotNetPath">
<ItemGroup>
<Solution Include="$(_CloneRepositoryRoot)%(Repository.Identity)\*.sln">
<Repository>%(Repository.Identity)</Repository>
</Solution>
<Solution>
<AdditionalProperties>RestoreGraphOutputPath=$(_RestoreGraphSpecsDirectory)%(Solution.Repository)\%(Solution.FileName)%(Solution.Extension).json</AdditionalProperties>
</Solution>
</ItemGroup>
<MSBuild
Projects="@(Solution)"
Targets="GenerateRestoreGraphFile"
BuildInParallel="$(BuildInParallel)" />
</Target>
<Target Name="_GenerateBuildGraph" DependsOnTargets="_FindDotNetPath">
<Exec
Command="$(DotNetPath) run -r &quot;$(_CloneRepositoryRoot) &quot; --graph-specs-root &quot;$(_RestoreGraphSpecsDirectory) &quot; &quot;$(_BuildGraphFile)&quot;"
WorkingDirectory="$(RepositoryRoot)tools\BuildGraph\" />
</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="$(MSBuildThisFileDirectory)$(_RepositoryListFileName)"
DestinationFiles="$(RepositoryFileWithCommit)" />
<XmlPoke2
XmlInputPath="$(RepositoryFileWithCommit)"
Query="//Repository[@Include='%(Repository.Identity)']/@Commit"
Value="%(Repository.Commit)" />
</Target>
<!-- Based on the solution here: http://stackoverflow.com/a/11331566 -->
<Target Name="_GetRepositoryCommits" Outputs="%(Repository.Identity)">
<PropertyGroup>
<RepositoryCloneDirectory>$(_CloneRepositoryRoot)%(Repository.Identity)</RepositoryCloneDirectory>
</PropertyGroup>
<Error Text="%(Repository.Identity) has not been cloned."
Condition="!Exists('$(RepositoryCloneDirectory)')" />
<GetGitCommitInfo WorkingDirectory="$(RepositoryCloneDirectory)">
<Output TaskParameter="CommitHash" PropertyName="_Hash" />
</GetGitCommitInfo>
<ItemGroup>
<Repository Update="%(Identity)" Commit="$(_Hash)" />
</ItemGroup>
<PropertyGroup>
<_Hash></_Hash>
</PropertyGroup>
</Target>
<Target Name="_FindDotNetPath">
<GetDotNetHost>
<Output TaskParameter="ExecutablePath" PropertyName="DotNetPath" />
</GetDotNetHost>
</Target>
</Project>