339 lines
16 KiB
XML
339 lines
16 KiB
XML
<Project>
|
|
<Import Project="RepositoryBuild.targets" />
|
|
<Import Project="push.targets" />
|
|
|
|
<PropertyGroup>
|
|
<LineupBuildDir>$(ArtifactsDir)lineups\</LineupBuildDir>
|
|
<ClearRepositoryCloneRoot Condition="'$(SkipClone)' == 'true'">false</ClearRepositoryCloneRoot>
|
|
<_CloneRepositoryRoot>$(RepositoryRoot).r\</_CloneRepositoryRoot>
|
|
<_DependencyBuildDirectory>$(RepositoryRoot).deps\build\</_DependencyBuildDirectory>
|
|
<_DependencyLineupDir>$(RepositoryRoot).deps\lineups\</_DependencyLineupDir>
|
|
<_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:Build</_RepositoryBuildTargets>
|
|
|
|
<!-- For external packages that come from feeds will mirrored to aspnetcore feeds. -->
|
|
<IntermediateMirrorPackageDir>$(IntermediateDir)mirror\</IntermediateMirrorPackageDir>
|
|
<!-- For external packages that come from feeds we don't mirror. -->
|
|
<IntermediateExternalPackageDir>$(IntermediateDir)ext\</IntermediateExternalPackageDir>
|
|
|
|
<PrepareDependsOn>$(PrepareDependsOn);VerifyPackageArtifactConfig;CleanArtifacts;CleanUniverseArtifacts</PrepareDependsOn>
|
|
<RestoreDependsOn>$(RestoreDependsOn);RestoreExternalDependencies</RestoreDependsOn>
|
|
<CleanDependsOn>$(CleanDependsOn);CleanArtifacts;CleanUniverseArtifacts</CleanDependsOn>
|
|
<CompileDependsOn>$(CompileDependsOn);CloneRepositories;BuildRepositories</CompileDependsOn>
|
|
<PackageDependsOn Condition="'$(TestOnly)' != 'true'">$(PackageDependsOn);CopyPackagesByCategory</PackageDependsOn>
|
|
<VerifyDependsOn Condition="'$(TestOnly)' != 'true'">$(VerifyDependsOn);VerifyCoherentVersions</VerifyDependsOn>
|
|
</PropertyGroup>
|
|
|
|
<Import Project="$(_RepositoryListToImport)" />
|
|
|
|
<Target Name="CleanUniverseArtifacts">
|
|
<RemoveDir Directories="$(_CloneRepositoryRoot)" Condition="Exists('$(_CloneRepositoryRoot)') AND '$(ClearRepositoryCloneRoot)' != 'false'" />
|
|
<RemoveDir Directories="$(LineupBuildDir)" />
|
|
<MakeDir Directories="$(LineupBuildDir)" />
|
|
</Target>
|
|
|
|
<Target Name="RestoreExternalDependencies">
|
|
<DownloadNuGetPackages
|
|
Packages="@(ExternalDependency->WithMetadataValue('Mirror', 'true'))"
|
|
DestinationFolder="$(IntermediateMirrorPackageDir)" />
|
|
</Target>
|
|
|
|
<Target Name="ResolveRepoInfo" DependsOnTargets="_PrepareRepositories">
|
|
<MSBuild Projects="$(MSBuildProjectFullPath)"
|
|
Targets="GetArtifactInfo"
|
|
Properties="RepositoryRoot=$(_CloneRepositoryRoot)%(Repository.Identity)\;KoreBuildRestoreTargetsImported=true;Configuration=$(Configuration);BuildNumber=$(BuildNumber)"
|
|
ContinueOnError="WarnAndContinue">
|
|
<Output TaskParameter="TargetOutputs" ItemName="ArtifactInfo" />
|
|
</MSBuild>
|
|
|
|
<MSBuild Projects="$(MSBuildProjectFullPath)"
|
|
Targets="ResolveSolutions"
|
|
Properties="RepositoryRoot=$(_CloneRepositoryRoot)%(Repository.Identity)\;KoreBuildRestoreTargetsImported=true;Configuration=$(Configuration);BuildNumber=$(BuildNumber)"
|
|
ContinueOnError="WarnAndContinue">
|
|
<Output TaskParameter="TargetOutputs" ItemName="Solution" />
|
|
</MSBuild>
|
|
|
|
<Error Text="No solutions were found in '$(_CloneRepositoryRoot)'" Condition="@(Solution->Count()) == 0" />
|
|
</Target>
|
|
|
|
<Target Name="GenerateLineup" DependsOnTargets="ResolveRepoInfo">
|
|
<PackNuSpec NuSpecPath="$(MSBuildThisFileDirectory)lineups\Internal.AspNetCore.Partners.Lineup.nuspec"
|
|
DestinationFolder="$(LineupBuildDir)"
|
|
Properties="version=$(Version)"
|
|
Dependencies="@(ExternalDependency->WithMetadataValue('Lineup', 'true'))">
|
|
<Output TaskParameter="Packages" ItemName="LineupPackage" />
|
|
</PackNuSpec>
|
|
|
|
<ItemGroup>
|
|
<PackageArtifactInfo Include="%(ArtifactInfo.PackageId)" Version="%(ArtifactInfo.Version)" Condition="'%(ArtifactInfo.ArtifactType)' == 'NuGetPackage'" />
|
|
</ItemGroup>
|
|
|
|
<PackNuSpec NuSpecPath="$(MSBuildThisFileDirectory)lineups\Internal.AspNetCore.Universe.Lineup.nuspec"
|
|
DestinationFolder="$(LineupBuildDir)"
|
|
Properties="version=$(Version)"
|
|
Dependencies="@(PackageArtifactInfo)">
|
|
<Output TaskParameter="Packages" ItemName="LineupPackage" />
|
|
</PackNuSpec>
|
|
</Target>
|
|
|
|
<Target Name="_PrepareRepositories">
|
|
<ItemGroup Condition="'$(KOREBUILD_REPOSITORY_INCLUDE)'!=''">
|
|
<_RepositoriesToInclude Include="$(KOREBUILD_REPOSITORY_INCLUDE)" />
|
|
<Repository Update="@(Repository)" Build="false" />
|
|
<Repository
|
|
Update="@(Repository)"
|
|
Condition="'@(Repository)'=='@(_RepositoriesToInclude)' AND '%(Identity)'!=''"
|
|
Build="true" />
|
|
</ItemGroup>
|
|
|
|
<ItemGroup Condition="'$(KOREBUILD_REPOSITORY_EXCLUDE)'!=''">
|
|
<_RepositoriesToExclude Include="$(KOREBUILD_REPOSITORY_EXCLUDE)" />
|
|
<Repository
|
|
Update="@(Repository)"
|
|
Condition="'@(Repository)'=='@(_RepositoriesToExclude)' AND '%(Identity)'!=''"
|
|
Build="false" />
|
|
</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)"
|
|
IgnoreStandardErrorWarningFormat="true"
|
|
StandardOutputImportance="low"
|
|
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" Condition="'$(SkipClone)' != 'true'">
|
|
<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"
|
|
IgnoreStandardErrorWarningFormat="true"
|
|
Timeout="180000" />
|
|
|
|
<Message Text="Resetting $(CloneRepository) commit to $(CloneRepositoryCommit) ..." Importance="High" Condition="'$(CloneRepositoryCommit)'!=''"/>
|
|
<Exec
|
|
Command="git reset --quiet --hard $(CloneRepositoryCommit)"
|
|
WorkingDirectory="$(_CloneRepositoryRoot)$(CloneRepository)"
|
|
IgnoreStandardErrorWarningFormat="true"
|
|
Condition="'$(CloneRepositoryCommit)'!=''" />
|
|
</Target>
|
|
|
|
<Target Name="BuildRepositories"
|
|
DependsOnTargets="_PrepareRepositories;_CreateRepositoriesListWithCommits;_UpdateNuGetConfig;_GenerateBuildGraph;_BuildRepositories" />
|
|
|
|
<Target Name="_PrepareRestoreGraphSpecs" DependsOnTargets="_PrepareRepositories">
|
|
<MSBuild Projects="$(MSBuildProjectFullPath)"
|
|
Targets="ResolveSolutions"
|
|
Properties="RepositoryRoot=$(_CloneRepositoryRoot)%(Repository.Identity)\"
|
|
ContinueOnError="WarnAndContinue"
|
|
Condition="%(Repository.Build)">
|
|
<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->WithMetadataValue('Build', 'true'))"
|
|
StartGraphAt="$(BuildGraphOf)"
|
|
DefaultPackageVersion="$(Version)"
|
|
PackageSpecsDirectory="$(_RestoreGraphSpecsDirectory)">
|
|
<Output TaskParameter="RepositoriesToBuildInOrder" ItemName="RepositoryToBuildInOrder" />
|
|
</RepoTasks.CalculateBuildGraph>
|
|
</Target>
|
|
|
|
<Target Name="_UpdateNuGetConfig">
|
|
<UpdatePackageSource
|
|
NuGetConfigPath="$(_CloneRepositoryRoot)%(Repository.Identity)\NuGet.config"
|
|
SourceName="Dependencies"
|
|
SourceUri="$(_DependencyPackagesDirectory)"
|
|
Condition="Exists('$(_DependencyPackagesDirectory)') AND %(Repository.Build)" />
|
|
|
|
<MakeDir Directories="$(BuildDir)" Condition="!Exists('$(BuildDir)')" />
|
|
|
|
<UpdatePackageSource
|
|
NuGetConfigPath="$(_CloneRepositoryRoot)%(Repository.Identity)\NuGet.config"
|
|
SourceName="Artifacts"
|
|
Condition="%(Repository.Build)"
|
|
SourceUri="$(BuildDir)" />
|
|
</Target>
|
|
|
|
<Target Name="CopyPackagesByCategory">
|
|
<ItemGroup>
|
|
<PackageArtifactFile Include="$(BuildDir)*.nupkg" />
|
|
<ExternalDependencyPackage Include="@(ExternalDependency->WithMetadataValue('Mirror', 'true'))" Category="mirror" />
|
|
<_MirroredPackageFiles Include="$(IntermediateMirrorPackageDir)*.nupkg" />
|
|
</ItemGroup>
|
|
|
|
<RepoTasks.CopyPackagesToSplitFolders
|
|
Packages="@(PackageArtifact);@(ExternalDependencyPackage)"
|
|
Files="@(PackageArtifactFile);@(_MirroredPackageFiles)"
|
|
DestinationFolder="$(ArtifactsDir)"
|
|
Overwrite="true" />
|
|
</Target>
|
|
|
|
<Target Name="VerifyPackageArtifactConfig">
|
|
<Error Text="Invalid configuration of %(PackageArtifact.Identity). Packages marked as Metapackage='true' must be Category='ship'."
|
|
Condition="'%(PackageArtifact.Category)' != 'ship' AND '%(PackageArtifact.Metapackage)' == 'true' " />
|
|
</Target>
|
|
|
|
<Target Name="VerifyCoherentVersions" DependsOnTargets="ResolveRepoInfo">
|
|
<ItemGroup>
|
|
<ShippingPackageFiles Include="$(ArtifactsDir)ship\*.nupkg" />
|
|
</ItemGroup>
|
|
|
|
<RepoTasks.VerifyCoherentVersions
|
|
PackageFiles="@(ShippingPackageFiles)"
|
|
ExternalDependencies="@(ExternalDependency)" />
|
|
</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>
|