228 lines
9.6 KiB
XML
228 lines
9.6 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>
|
|
<_RestoreGraphSpecsDirectory>$(RepositoryRoot)obj\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>
|
|
|
|
<ItemGroup>
|
|
<PackageReference Include="PackagePublisher" Version="1.0.2-*" />
|
|
</ItemGroup>
|
|
|
|
<Import Project="$(_RepositoryListToImport)" />
|
|
|
|
<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>
|
|
|
|
<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)</_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)" />
|
|
|
|
<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="_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);
|
|
PackagePublisherPath=$(PackagePublisherNetCoreApp)
|
|
</_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">
|
|
<PropertyGroup>
|
|
<BuildGrapArgs>$(DotNetPath) run -r "$(_CloneRepositoryRoot) " --graph-specs-root "$(_RestoreGraphSpecsDirectory) " "$(_BuildGraphFile)"</BuildGrapArgs>
|
|
<BuildGrapArgs Condition="'$(BuildGraphOf)'!=''">$(BuildGrapArgs) --start-at $(BuildGraphOf)</BuildGrapArgs>
|
|
</PropertyGroup>
|
|
<Exec
|
|
Command="$(BuildGrapArgs)"
|
|
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="$(_DefaultRepositoryList)"
|
|
DestinationFiles="$(RepositoryFileWithCommit)" />
|
|
|
|
<XmlPoke
|
|
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>
|
|
|
|
<Warning Text="%(Repository.Identity) has not been cloned."
|
|
Condition="!Exists('$(RepositoryCloneDirectory)')" />
|
|
|
|
<GetGitCommitInfo WorkingDirectory="$(RepositoryCloneDirectory)" Condition="Exists('$(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>
|