aspnetcore/build/repo.targets

198 lines
12 KiB
XML

<Project>
<Import Project="common.props" />
<PropertyGroup>
<!-- Project for building the Runtime Store -->
<MetaPackagePath>$(RepositoryRoot)src\Microsoft.AspNetCore.RuntimeStore\</MetaPackagePath>
<MetaPackageFile>$(MetaPackagePath)Microsoft.AspNetCore.RuntimeStore.csproj</MetaPackageFile>
<HostingStartupTemplatePath>$(RepositoryRoot)tools\Microsoft.AspNetCore.HostingStartup.Template\</HostingStartupTemplatePath>
<HostingStartupTemplateFile>$(HostingStartupTemplatePath)Microsoft.AspNetCore.HostingStartup.Template.csproj</HostingStartupTemplateFile>
<!-- Project for building the NuGet Fallback Archive (LZMA for CLI) -->
<FallbackArchiveDir>$(RepositoryRoot)src\Archive.AspNetCore.All\</FallbackArchiveDir>
<FallbackArchiveProj>$(FallbackArchiveDir)Archive.AspNetCore.All.csproj</FallbackArchiveProj>
<WorkingDirectory>$(MetaPackagePath)bin\work\</WorkingDirectory>
<PackageCacheOutputPath>$(MetaPackagePath)bin\packageCache\</PackageCacheOutputPath>
<ArtifactsDir>$(RepositoryRoot)artifacts\</ArtifactsDir>
<ArtifactsZipDir>$(ArtifactsDir)zip\</ArtifactsZipDir>
<DepsOutputPath>$(ArtifactsDir)deps\</DepsOutputPath>
<ArtifactsZipTimestampDir>$(ArtifactsZipDir)ts\</ArtifactsZipTimestampDir>
<ArtifactsZipNoTimestampDir>$(ArtifactsZipDir)nt\</ArtifactsZipNoTimestampDir>
<TempDir>$(ArtifactsDir)temp\</TempDir>
<ToolsDir>$(RepositoryRoot)tools\</ToolsDir>
<DependencyBuildDirectory>$(RepositoryRoot).deps\build\</DependencyBuildDirectory>
<PrepareDependsOn>
$(PrepareDependsOn);
UpdateNuGetConfig
</PrepareDependsOn>
</PropertyGroup>
<Target Name="UpdateNuGetConfig">
<UpdatePackageSource
NuGetConfigPath="$(RepositoryRoot)NuGet.config"
SourceName="Dependencies"
SourceUri="$(DependencyBuildDirectory)"
Condition="Exists('$(DependencyBuildDirectory)')" />
</Target>
<Target Name="BuildPackageCache" DependsOnTargets="UpdateNuGetConfig">
<GetOSPlatform>
<!-- Returns {Linux, macOS, Windows} -->
<Output TaskParameter="PlatformName" PropertyName="OSPlatform" />
</GetOSPlatform>
<PropertyGroup>
<OutputZipSufix Condition="'$(OSPlatform)' == 'Windows'">win$(PACKAGE_CACHE_PLATFORM)</OutputZipSufix>
<OutputZipSufix Condition="'$(OSPlatform)' == 'Linux'">linux</OutputZipSufix>
<OutputZipSufix Condition="'$(OSPlatform)' == 'macOS'">osx</OutputZipSufix>
<RID Condition="'$(OSPlatform)' == 'Windows'">win7-$(PACKAGE_CACHE_PLATFORM)</RID>
<RID Condition="'$(OSPlatform)' == 'Linux'">linux-$(PACKAGE_CACHE_PLATFORM)</RID>
<RID Condition="'$(OSPlatform)' == 'macOS'">osx-$(PACKAGE_CACHE_PLATFORM)</RID>
<OutputZip>$(ArtifactsDir)Build.RS.$(OutputZipSufix)-$(VersionSuffix).zip</OutputZip>
<OutputZipNoTimestamp>$(ArtifactsDir)Build.RS.$(OutputZipSufix).zip</OutputZipNoTimestamp>
</PropertyGroup>
<RemoveDir Directories="$(PackageCacheOutputPath)" />
<RemoveDir Directories="$(WorkingDirectory)" />
<Exec Command="dotnet store --manifest $(MetaPackageFile) --configuration Release --framework netcoreapp2.0 --runtime $(RID) --output $(PackageCacheOutputPath) --framework-version 2.0.0-* --working-dir $(WorkingDirectory)" />
<Exec Command="dotnet restore" WorkingDirectory="$(RepositoryRoot)tools\TrimDeps" />
<Exec Command="dotnet restore" WorkingDirectory="$(HostingStartupTemplatePath)" />
<!--- MSBuild caches things if you run inproc so have to use Exec -->
<Exec Command="dotnet msbuild /t:Restore;Rebuild;CollectDeps $(HostingStartupTemplateFile) /p:DepsOutputPath=$(DepsOutputPath);HostingStartupPackageName=%(HostingStartupPackageReference.Identity);HostingStartupPackageVersion=%(Version)"/>
<ItemGroup>
<PackageStoreManifestFiles Include="$(PackageCacheOutputPath)**\artifact.xml">
<DestinationFile>manifest.$(RID).xml</DestinationFile>
</PackageStoreManifestFiles>
<_PackageCacheFiles Include="$(PackageCacheOutputPath)**\*" Exclude="$(PackageCacheOutputPath)**\artifact.xml" />
<PackageCacheFiles Include="@(_PackageCacheFiles)" >
<NoTimestampRecursiveDir>$([System.String]::new('%(RecursiveDir)').Replace('-$(BuildNumber)', '-final'))</NoTimestampRecursiveDir>
</PackageCacheFiles>
<DepsFiles Include="$(DepsOutputPath)**\*" />
</ItemGroup>
<Move SourceFiles="%(PackageStoreManifestFiles.FullPath)" DestinationFiles="$(ArtifactsDir)%(PackageStoreManifestFiles.DestinationFile)" />
<Copy SourceFiles="@(DepsFiles)" DestinationFolder="$(ArtifactsZipTimestampDir)additionalDeps\%(RecursiveDir)" />
<Copy SourceFiles="@(PackageCacheFiles)" DestinationFolder="$(ArtifactsZipTimestampDir)store\%(RecursiveDir)" />
<Copy SourceFiles="@(DepsFiles)" DestinationFolder="$(ArtifactsZipNoTimestampDir)additionalDeps\%(RecursiveDir)" />
<Copy SourceFiles="@(PackageCacheFiles)" DestinationFiles="$(ArtifactsZipNoTimestampDir)store\%(PackageCacheFiles.NoTimestampRecursiveDir)%(PackageCacheFiles.FileName)%(PackageCacheFiles.Extension)" />
<ItemGroup>
<NoTimestampDepsFiles Include="$(ArtifactsZipNoTimestampDir)additionalDeps\**\*"/>
</ItemGroup>
<MSBuild Projects="$(ProjectPath)" Targets="_RemoveTimestampFromDepsFile" Properties="DepsFile=%(NoTimestampDepsFiles.FullPath)" />
<ItemGroup>
<OutputZipFiles Include="$(ArtifactsZipTimestampDir)**\*" />
<OutputZipFilesNoTimestamp Include="$(ArtifactsZipNoTimestampDir)**\*" />
</ItemGroup>
<ZipArchive File="$(OutputZip)" SourceFiles="@(OutputZipFiles)" WorkingDirectory="$(ArtifactsZipTimestampDir)" Overwrite="true"/>
<ZipArchive File="$(OutputZipNoTimeStamp)" SourceFiles="@(OutputZipFilesNoTimestamp)" WorkingDirectory="$(ArtifactsZipNoTimestampDir)" Overwrite="true"/>
<!--Drop a nuspec file in artifacts for packing zip files into a nupkg-->
<Copy SourceFiles="$(RepositoryRoot)build\Build.RS.nuspec" DestinationFolder="$(ArtifactsDir)" Condition="'$(OSPlatform)'=='Linux'" />
<WriteLinesToFile File="$(ArtifactsDir)version.txt" Lines="$(VersionPrefix)-$(VersionSuffix)" Overwrite="true" Condition="'$(OSPlatform)'=='Linux'" />
</Target>
<Target Name="_RemoveTimestampFromDepsFile">
<Exec Command="powershell.exe -command &quot;(Get-Content $(DepsFile)).replace('-$(BuildNumber)','-final') | Set-Content $(DepsFile)&quot;" Condition="'$(OSPlatform)'=='Windows'"/>
<Exec Command="sed -i '' -e &quot;s/\-$(BuildNumber)/\-final/g&quot; $(DepsFile)" Condition="'$(OSPlatform)'=='macOS'"/>
<Exec Command="sed -i -e &quot;s/\-$(BuildNumber)/\-final/g&quot; $(DepsFile)" Condition="'$(OSPlatform)'=='Linux'"/>
</Target>
<Target Name="_BuildFallbackArchive">
<Error Text="AspNetPackageVersion must be specified" Condition=" '$(AspNetPackageVersion)' == '' " />
<Error Text="PackageSource must be specified" Condition=" '$(PackageSource)' == '' " />
<Error Text="OutputPackageName must be specified" Condition=" '$(OutputPackageName)' == '' " />
<Error Text="ArchiverPath must be specified" Condition=" '$(ArchiverPath)' == '' " />
<Error Text="Archiver not found at $(ArchiverPath)" Condition="!Exists('$(ArchiverPath)')" />
<!-- Clear the directories -->
<RemoveDir Directories="$(FallbackArchiveDir)bin" />
<RemoveDir Directories="$(FallbackArchiveDir)obj" />
<PropertyGroup>
<FallbackStagingDir>$(FallbackArchiveDir)obj/$(OutputPackageName)</FallbackStagingDir>
<FallbackOutputArchive>$(RepositoryRoot)artifacts\$(OutputPackageName).lzma</FallbackOutputArchive>
<FallbackRestoreConfigFile>$(FallbackArchiveDir)\obj\$(OutputPackageName).NuGet.config</FallbackRestoreConfigFile>
</PropertyGroup>
<!-- Create the Staging Dir -->
<MakeDir Directories="$(FallbackStagingDir)" />
<!-- Copy the NuGet.config from this repo and update it with the Package Source -->
<Copy SourceFiles="$(RepositoryRoot)NuGet.config" DestinationFiles="$(FallbackRestoreConfigFile)" />
<UpdatePackageSource
NuGetConfigPath="$(FallbackRestoreConfigFile)"
SourceName="Dependencies"
SourceUri="$(PackageSource)" />
<!-- Restore the target project -->
<MSBuild Projects="$(FallbackArchiveProj)" Targets="Restore" Properties="RestorePackagesPath=$(FallbackStagingDir);AspNetPackageVersion=$(AspNetPackageVersion);RestoreConfigFile=$(FallbackRestoreConfigFile)" />
<!-- Create the archive -->
<Message Text="Producing LZMA Archive, this may take a while..." Importance="high" />
<Exec Command="$(ArchiverPath) -a $(FallbackOutputArchive) $(FallbackStagingDir)" />
</Target>
<Target Name="BuildFallbackArchive">
<!-- Validate Arguments -->
<Error Text="COHERENCE_SIGNED_DROP_LOCATION is not specified. This requires a path like \\aspnetci\drops\Coherence-Signed\{branch}\{build-number}"
Condition=" '$(COHERENCE_SIGNED_DROP_LOCATION)' == '' " />
<Error Text="Required Property 'BuildNumber' not provided" Condition="'$(BuildNumber)' == ''" />
<!-- Determine ASP.NET Package Version -->
<PropertyGroup>
<NoTimestampSuffix Condition="'$(TIMESTAMP_FREE_VERSION)' != ''">$(TIMESTAMP_FREE_VERSION)</NoTimestampSuffix>
<NoTimestampSuffix Condition="'$(NoTimestampSuffix)' == ''">final</NoTimestampSuffix>
<NoTimestampVersion>$(VersionPrefix)-$(OriginalVersionSuffix)-$(NoTimestampSuffix)</NoTimestampVersion>
<TimestampVersion>$(VersionPrefix)-$(OriginalVersionSuffix)-$(BuildNumber)</TimestampVersion>
<NoTimestampSource>$(COHERENCE_SIGNED_DROP_LOCATION)\Signed\Packages-NoTimeStamp</NoTimestampSource>
<TimestampSource>$(COHERENCE_SIGNED_DROP_LOCATION)\Signed\Packages</TimestampSource>
</PropertyGroup>
<!-- Run the actual target twice, once for timestamped packages, once for non-timestamped packages -->
<!-- Here, we're re-invoking KoreBuild, but limiting it to a specific target. -->
<!-- This won't rerun the whole build, but it ensures that the necessary MSBuild Tasks and Properties are initialized -->
<MSBuild Projects="$(ProjectPath)" Targets="_BuildFallbackArchive" Properties="AspNetPackageVersion=$(TimestampVersion);PackageSource=$(TimestampSource);OutputPackageName=nuGetPackagesArchive.timestamped;ArchiverPath=$(ArchiverPath)" />
<MSBuild Projects="$(ProjectPath)" Targets="_BuildFallbackArchive" Properties="AspNetPackageVersion=$(NoTimestampVersion);PackageSource=$(NoTimestampSource);OutputPackageName=nuGetPackagesArchive.notimestamp;ArchiverPath=$(ArchiverPath)" />
<!-- Copy LZMA archives to Coherence-Signed drop location -->
<PropertyGroup>
<PublishDir Condition="'$(PublishShare)' != ''">$(PublishShare)\fallbackArchives</PublishDir>
</PropertyGroup>
<Copy SourceFiles="$(RepositoryRoot)artifacts\nuGetPackagesArchive.timestamped.lzma;$(RepositoryRoot)artifacts\nuGetPackagesArchive.notimestamp.lzma" DestinationFolder="$(PublishDir)" Condition="'$(PublishDir)' != ''" />
</Target>
<Target Name="AddManifestsToNupkg">
<Error Text="COHERENCE_DROP_LOCATION is not specified. This requires a path like \\aspnetci\drops\Coherence\{branch}\{build-number}"
Condition=" '$(COHERENCE_DROP_LOCATION)' == '' " />
<ItemGroup>
<MetaPackageNupkg Include="$(COHERENCE_DROP_LOCATION)\ship\Microsoft.AspNetCore.All.*.nupkg" />
<ManifestFiles Include="$(ArtifactsDir)*.xml"/>
</ItemGroup>
<RemoveDir Directories="@(MetaPackageNupkg->'$(TempDir)%(Filename)')" />
<Copy SourceFiles="@(MetaPackageNupkg)" DestinationFolder="$(ArtifactsDir)" />
<UnzipArchive File="$(ArtifactsDir)%(MetaPackageNupkg.FileName)%(MetaPackageNupkg.Extension)" Destination="@(MetaPackageNupkg->'$(TempDir)%(Filename)')" />
<Copy SourceFiles="@(ManifestFiles)" DestinationFolder="@(MetaPackageNupkg->'$(TempDir)%(Filename)\build\')" />
<ItemGroup>
<ArchiveFiles Include="$(TempDir)%(MetaPackageNupkg.Filename)\**\*" />
</ItemGroup>
<ZipArchive File="%(MetaPackageNupkg.FullPath)" SourceFiles="@(ArchiveFiles)" WorkingDirectory="@(MetaPackageNupkg->'$(TempDir)%(Filename)')" Overwrite="true" />
</Target>
</Project>