aspnetcore/build/repo.targets

197 lines
9.1 KiB
XML

<Project>
<Import Project="RepositoryBuild.targets" />
<Import Project="push.targets" />
<PropertyGroup>
<SubmoduleRoot>$(RepositoryRoot)modules\</SubmoduleRoot>
<LineupBuildDir>$(ArtifactsDir)lineups\</LineupBuildDir>
<_DependencyBuildDirectory>$(RepositoryRoot).deps\build\</_DependencyBuildDirectory>
<_DependencyLineupDir>$(RepositoryRoot).deps\lineups\</_DependencyLineupDir>
<_DependencyPackagesDirectory>$(_DependencyBuildDirectory)</_DependencyPackagesDirectory>
<_RestoreGraphSpecsDirectory>$(IntermediateDir)package-specs\</_RestoreGraphSpecsDirectory>
<_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>
<GeneratedPackageVersionPropsPath>$(IntermediateDir)dependencies.props</GeneratedPackageVersionPropsPath>
<PrepareDependsOn>$(PrepareDependsOn);VerifyPackageArtifactConfig;CleanArtifacts;PrepareOutputPaths</PrepareDependsOn>
<RestoreDependsOn>$(RestoreDependsOn);RestoreExternalDependencies</RestoreDependsOn>
<CleanDependsOn>$(CleanDependsOn);CleanArtifacts</CleanDependsOn>
<CompileDependsOn>$(CompileDependsOn);BuildRepositories</CompileDependsOn>
<PackageDependsOn Condition="'$(TestOnly)' != 'true'">$(PackageDependsOn);CopyPackagesByCategory</PackageDependsOn>
<VerifyDependsOn Condition="'$(TestOnly)' != 'true'">$(VerifyDependsOn);VerifyCoherentVersions</VerifyDependsOn>
</PropertyGroup>
<Target Name="PrepareOutputPaths">
<MakeDir Directories="$(ArtifactsDir);$(BuildDir);$(LineupBuildDir)" />
</Target>
<Target Name="RestoreExternalDependencies">
<DownloadNuGetPackages
Packages="@(ExternalDependency->WithMetadataValue('Mirror', 'true'))"
DestinationFolder="$(IntermediateMirrorPackageDir)" />
</Target>
<Target Name="ResolveRepoInfo" DependsOnTargets="_PrepareRepositories">
<Error Text="%(Repository.RootPath) does not exist. Did you forget to clone the submodules? Run `git submodules update`." Condition="!Exists(%(Repository.RootPath))" />
<MSBuild Projects="$(MSBuildProjectFullPath)"
Targets="GetArtifactInfo"
Properties="RepositoryRoot=%(Repository.RootPath);KoreBuildRestoreTargetsImported=true;Configuration=$(Configuration);BuildNumber=$(BuildNumber)"
ContinueOnError="WarnAndContinue">
<Output TaskParameter="TargetOutputs" ItemName="ArtifactInfo" />
</MSBuild>
<MSBuild Projects="$(MSBuildProjectFullPath)"
Targets="ResolveSolutions"
Properties="RepositoryRoot=%(Repository.RootPath);KoreBuildRestoreTargetsImported=true;Configuration=$(Configuration);BuildNumber=$(BuildNumber)"
ContinueOnError="WarnAndContinue">
<Output TaskParameter="TargetOutputs" ItemName="Solution" />
</MSBuild>
<Error Text="No solutions were found in '$(SubmoduleRoot)'" Condition="@(Solution->Count()) == 0" />
</Target>
<Target Name="GenerateLineup" DependsOnTargets="ResolveRepoInfo">
<ItemGroup>
<PackageArtifactInfo Include="%(ArtifactInfo.PackageId)" Version="%(ArtifactInfo.Version)" Condition="'%(ArtifactInfo.ArtifactType)' == 'NuGetPackage'" />
</ItemGroup>
<GeneratePackageVersionPropsFile
Packages="@(ExternalDependency);@(PackageArtifactInfo)"
OutputPath="$(GeneratedPackageVersionPropsPath)" />
<Copy SourceFiles="$(GeneratedPackageVersionPropsPath)" DestinationFolder="$(ArtifactsDir)" />
<PackNuSpec NuSpecPath="$(MSBuildThisFileDirectory)lineups\Internal.AspNetCore.Universe.Lineup.nuspec"
DestinationFolder="$(LineupBuildDir)"
Properties="version=$(Version);dependenciesPropsFile=$(GeneratedPackageVersionPropsPath)">
<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)' != ''" />
<ItemGroup>
<Repository Update="%(Identity)" RootPath="$(SubmoduleRoot)%(Identity)\" />
</ItemGroup>
</Target>
<Target Name="BuildRepositories"
DependsOnTargets="_PrepareRepositories;_UpdateNuGetConfig;_GenerateBuildGraph;_BuildRepositories" />
<Target Name="_PrepareRestoreGraphSpecs" DependsOnTargets="_PrepareRepositories">
<MSBuild Projects="$(MSBuildProjectFullPath)"
Targets="ResolveSolutions"
Properties="RepositoryRoot=%(Repository.RootPath)"
ContinueOnError="WarnAndContinue"
Condition="%(Repository.Build)">
<Output TaskParameter="TargetOutputs" ItemName="Solution" />
</MSBuild>
<Error Text="No solutions were found. Did you remember to checkout the git submodules? Run `git submodules update`." 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);
$(SubmoduleRoot)**\*.csproj;
$(SubmoduleRoot)**\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="%(Repository.RootPath)NuGet.config"
SourceName="Dependencies"
SourceUri="$(_DependencyPackagesDirectory)"
Condition="Exists('$(_DependencyPackagesDirectory)') AND %(Repository.Build)" />
<MakeDir Directories="$(BuildDir)" Condition="!Exists('$(BuildDir)')" />
<UpdatePackageSource
NuGetConfigPath="%(Repository.RootPath)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>
</Project>