aspnetcore/build/Publish.targets

291 lines
15 KiB
XML

<Project>
<PropertyGroup>
<DependencyAssetsDir>$(RepositoryRoot).deps\assets\</DependencyAssetsDir>
<DependencyPackagesDir>$(RepositoryRoot).deps\packages\</DependencyPackagesDir>
<DependencyMirrorDir>$(RepositoryRoot).deps\mirror\</DependencyMirrorDir>
<!-- This file is used by the dotnet/cli to determine if our shared framework aligns with the version they pull. -->
<BaseRuntimeVersionFileName>aspnetcore_base_runtime.version</BaseRuntimeVersionFileName>
<BaseRuntimeVersionFile>$(IntermediateDir)$(BaseRuntimeVersionFileName)</BaseRuntimeVersionFile>
<LatestRuntimeVersionFileName>latest.aspnetcore.version</LatestRuntimeVersionFileName>
<LatestRuntimeVersionFile>$(IntermediateDir)$(LatestRuntimeVersionFileName)</LatestRuntimeVersionFile>
<PublishDependsOn>
ResolveCommitHash;
PrepareOutputPaths;
GetFilesToPublish;
CopyToPublishArtifacts;
PublishToAzureFeed;
PublishToTransportFeed;
PublishToMyGet;
</PublishDependsOn>
<!-- Settings for pushing to the transport feed -->
<PushToBlobFeed_Overwrite Condition="'$(PushToBlobFeed_Overwrite)' == ''">false</PushToBlobFeed_Overwrite>
<PushToBlobFeed_MaxClients Condition="'$(PushToBlobFeed_MaxClients)' == ''">8</PushToBlobFeed_MaxClients>
<BlobFileRelativePathBase Condition="'$(BlobFileRelativePathBase)' == ''">assets</BlobFileRelativePathBase>
<BlobFileRelativePathBase Condition="!HasTrailingSlash('$(BlobFileRelativePathBase)')">$(BlobFileRelativePathBase)/</BlobFileRelativePathBase>
</PropertyGroup>
<Target Name="Publish" DependsOnTargets="$(PublishDependsOn)" />
<Target Name="GeneratePublishFiles" DependsOnTargets="ResolveCommitHash">
<MakeDir Directories="$(IntermediateDir)" />
<!--
Used by the dotnet/cli build to determine which version of Microsoft.NETCore.App is used.
-->
<WriteLinesToFile File="$(BaseRuntimeVersionFile)" Lines="$(MicrosoftNETCoreApp21PackageVersion)" Overwrite="true" />
<!--
Used by the downloader scripts when pulling from a 'channel' instead of a specific version.
The second line must be the package version.
See dotnet-install.ps1/sh.
-->
<WriteLinesToFile
File="$(LatestRuntimeVersionFile)"
Lines="$(CommitHash);$(PackageVersion)"
Overwrite="true" />
<ItemGroup>
<SharedFxVersionBadge Include="$(ArtifactsDir)$(SharedFxInstallerName)-%(AllSharedFxRIDs.Identity)-version-badge.svg" />
</ItemGroup>
<GenerateSvgBadge
OutputPath="%(SharedFxVersionBadge.Identity)"
Label="version"
Value="$(PackageVersion)" />
</Target>
<Target Name="GetFilesToPublish" DependsOnTargets="GetArtifactInfo;GeneratePublishFiles">
<PropertyGroup>
<BlobBasePath>Runtime/$(PackageVersion)/</BlobBasePath>
<AliasBlobBasePath>Runtime/$(SharedFxCliBlobChannel)/</AliasBlobBasePath>
<PackageArchiveFileName>nuGetPackagesArchive-$(PackageVersion).lzma</PackageArchiveFileName>
<InstallerBaseFileName>aspnetcore-runtime-$(PackageVersion)</InstallerBaseFileName>
<InstallerAliasBaseFileName>aspnetcore-runtime-latest</InstallerAliasBaseFileName>
<IntermediateInstallerBaseFileName>aspnetcore-runtime-internal-$(PackageVersion)</IntermediateInstallerBaseFileName>
</PropertyGroup>
<ItemGroup>
<!-- Intermediate files passed on to the dotnet-CLI. -->
<FilesToPublish Include="$(DependencyAssetsDir)$(PackageArchiveFileName)" >
<RelativeBlobPath>$(BlobBasePath)$(PackageArchiveFileName)</RelativeBlobPath>
<ManifestArtifactData>ShipInstaller=dotnetcli</ManifestArtifactData>
</FilesToPublish>
<FilesToPublish Include="$(DependencyAssetsDir)$(IntermediateInstallerBaseFileName)-%(IntermediateInstaller.Identity)%(IntermediateInstaller.FileExt)" Condition=" '%(IntermediateInstaller.Identity)' != '' ">
<RelativeBlobPath>$(BlobBasePath)$(IntermediateInstallerBaseFileName)-%(IntermediateInstaller.Identity)%(IntermediateInstaller.FileExt)</RelativeBlobPath>
<ManifestArtifactData>ShipInstaller=dotnetcli</ManifestArtifactData>
</FilesToPublish>
<FilesToPublish Include="$(BaseRuntimeVersionFile)">
<RelativeBlobPath>$(BlobBasePath)$(BaseRuntimeVersionFileName)</RelativeBlobPath>
<ManifestArtifactData>ShipInstaller=dotnetcli</ManifestArtifactData>
<ContentType>text/plain</ContentType>
</FilesToPublish>
<!-- Archive installers -->
<FilesToPublish Include="$(DependencyAssetsDir)$(InstallerBaseFileName)-%(NativeInstaller.Identity)%(NativeInstaller.FileExt)" Condition=" '%(NativeInstaller.FileExt)' != '' ">
<RelativeBlobPath>$(BlobBasePath)$(InstallerBaseFileName)-%(NativeInstaller.Identity)%(NativeInstaller.FileExt)</RelativeBlobPath>
<ManifestArtifactData>ShipInstaller=dotnetcli</ManifestArtifactData>
</FilesToPublish>
<!-- Support for README badges and dotnet-install.ps1/sh -->
<FilesToPublish Include="$(DependencyAssetsDir)$(InstallerBaseFileName)-%(NativeInstaller.Identity)%(NativeInstaller.FileExt)" Condition=" '%(NativeInstaller.FileExt)' != '' ">
<RelativeBlobPath>$(AliasBlobBasePath)$(InstallerAliasBaseFileName)-%(NativeInstaller.Identity)%(NativeInstaller.FileExt)</RelativeBlobPath>
<ManifestArtifactData>ShipInstaller=dotnetcli</ManifestArtifactData>
<Overwrite>true</Overwrite>
<!-- These uploads duplicate the same blob in a separate location for README download links and to make dotnet-install.ps1/sh work when specifying -Channel. -->
<IsDuplicateUpload>true</IsDuplicateUpload>
</FilesToPublish>
<FilesToPublish Include="@(SharedFxVersionBadge)">
<RelativeBlobPath>$(AliasBlobBasePath)%(SharedFxVersionBadge.FileName)%(SharedFxVersionBadge.Extension)</RelativeBlobPath>
<ManifestArtifactData>ShipInstaller=dotnetcli</ManifestArtifactData>
<CacheControl>no-cache, no-store, must-revalidate</CacheControl>
<ContentType>image/svg+xml</ContentType>
<Overwrite>true</Overwrite>
</FilesToPublish>
<FilesToPublish Include="$(LatestRuntimeVersionFile)">
<RelativeBlobPath>$(AliasBlobBasePath)$(LatestRuntimeVersionFileName)</RelativeBlobPath>
<ManifestArtifactData>ShipInstaller=dotnetcli</ManifestArtifactData>
<CacheControl>no-cache, no-store, must-revalidate</CacheControl>
<ContentType>text/plain</ContentType>
<Overwrite>true</Overwrite>
</FilesToPublish>
<!-- Packages -->
<PackageToMirror Include="$(DependencyMirrorDir)%(ExternalDependency.Identity).%(ExternalDependency.Version).nupkg"
Condition=" '%(ExternalDependency.Mirror)' == 'true' " />
<_PackageArtifactInfo
Include="@(ArtifactInfo)"
ArtifactPath="$(DependencyPackagesDir)%(ArtifactInfo.PackageId).%(ArtifactInfo.Version).nupkg"
Condition="'%(ArtifactInfo.ArtifactType)' == 'NuGetPackage'" />
<_SymbolsPackageArtifactInfo
Include="@(ArtifactInfo)"
ArtifactPath="$(DependencyPackagesDir)%(ArtifactInfo.PackageId).%(ArtifactInfo.Version).symbols.nupkg"
Condition="'%(ArtifactInfo.ArtifactType)' == 'NuGetSymbolsPackage'" />
<NpmPackageToPublish Include="$(DependencyAssetsDir)%(ArtifactInfo.FileName)%(ArtifactInfo.Extension)" Condition="'%(ArtifactInfo.ArtifactType)' == 'NpmPackage'" />
</ItemGroup>
<!-- Join required because shipping category is stored in universe (PackageArtifact), but information about package ID and version comes from repos (ArtifactInfo). -->
<RepoTasks.JoinItems
Left="@(_PackageArtifactInfo)" LeftKey="PackageId" LeftMetadata="*" LeftItemSpec="Identity"
Right="@(PackageArtifact)" RightMetadata="Category">
<Output TaskParameter="JoinResult" ItemName="_PackageArtifactInfoWithCategory" />
</RepoTasks.JoinItems>
<ItemGroup>
<_MissingPackageArtifact Include="@(PackageArtifact)" />
<_MissingPackageArtifact Remove="%(_PackageArtifactInfoWithCategory.PackageId)" />
</ItemGroup>
<RepoTasks.JoinItems
Left="@(_SymbolsPackageArtifactInfo)" LeftKey="PackageId" LeftMetadata="*" LeftItemSpec="Identity"
Right="@(PackageArtifact)" RightMetadata="Category">
<Output TaskParameter="JoinResult" ItemName="_SymbolsArtifactInfoWithCategory" />
</RepoTasks.JoinItems>
<!--
Add symbols packages to PackageToPublish after validating PackageToPublish matches PackageArtifact.
We don't always produce a symbols package for each regular packages.
-->
<ItemGroup>
<PackageToPublish Include="%(_PackageArtifactInfoWithCategory.ArtifactPath)" Category="%(_PackageArtifactInfoWithCategory.Category)" />
<PackageToPublish Include="%(_SymbolsArtifactInfoWithCategory.ArtifactPath)" Category="%(_SymbolsArtifactInfoWithCategory.Category)" />
</ItemGroup>
</Target>
<Target Name="_CheckFilesToPublish">
<ItemGroup>
<_MissingArtifactFile Include="@(FilesToPublish)" Condition="!Exists(%(FilesToPublish.Identity))" />
<_MissingArtifactFile Include="@(NpmPackageToPublish)" Condition="!Exists(%(NpmPackageToPublish.Identity))" />
<_MissingArtifactFile Include="@(PackageToMirror)" Condition="!Exists(%(PackageToMirror.Identity))" />
<_MissingArtifactFile Include="@(PackageToPublish)" Condition="!Exists(%(PackageToPublish.Identity))" />
</ItemGroup>
<Error Text="Missing expected files:%0A - @(_MissingArtifactFile, '%0A - ')" Condition="@(_MissingArtifactFile->Count()) != 0" />
<Error Text="Missing expected packages from PackageToPublish. These were defined as expected PackageArtifact's in artifacts.props: %0A - @(_MissingPackageArtifact, '%0A - ')" Condition="@(_MissingPackageArtifact->Count()) != 0" />
</Target>
<Target Name="CopyToPublishArtifacts" DependsOnTargets="_CheckFilesToPublish">
<Copy SourceFiles="%(FilesToPublish.Identity)" DestinationFiles="$(ArtifactsDir)%(FilesToPublish.RelativeBlobPath)" Condition="'%(FilesToPublish.RelativeBlobPath)' != ''" />
</Target>
<Target Name="PublishToMyGet"
DependsOnTargets="_CheckFilesToPublish;GetToolsets"
Condition="'$(PublishToMyget)' == 'true'">
<Error Text="Missing required property: PublishMyGetFeedUrl" Condition=" '$(PublishMyGetFeedUrl)' == '' "/>
<Error Text="Missing required property: PublishMyGetNpmRegistryUrl" Condition=" '$(PublishMyGetNpmRegistryUrl)' == '' "/>
<Error Text="Missing required property: PublishMyGetFeedKey" Condition=" '$(PublishMyGetFeedKey)' == '' "/>
<!-- Contains the super set of packages that we'd like to publish to MyGet and Azure blob -->
<ItemGroup>
<PackageToPublishToMyGet Include="@(PackageToPublish)" />
<PackageToPublishToMyGet Include="@(PackageToMirror)" />
</ItemGroup>
<Error Message="No packages found to publish" Condition="@(PackageToPublishToMyGet->Count()) == 0" />
<PushNuGetPackages
Packages="@(PackageToPublishToMyGet)"
Feed="$(PublishMyGetFeedUrl)"
ApiKey="$(PublishMyGetFeedKey)" />
<PropertyGroup>
<AuthTokenSetting>$(PublishMyGetNpmRegistryUrl.Replace("https:", "")):_authToken</AuthTokenSetting>
</PropertyGroup>
<Exec Command="npm config set &quot;$(AuthTokenSetting)&quot; $(PublishMyGetFeedKey)"
StandardOutputImportance="Normal" />
<Run FileName="npm"
Arguments="publish;--registry;$(PublishMyGetNpmRegistryUrl);%(NpmPackageToPublish.Identity)"
MaxRetries="5"
UseShellExecute="true"
ContinueOnError="true">
<Output TaskParameter="ExitCode" ItemName="_NpmExitCodes" />
</Run>
<Exec Command="npm config delete $(AuthTokenSetting)"
StandardOutputImportance="Normal" />
<Error Text="Publishing npm modules failed" Condition="%(_NpmExitCodes.Identity) != 0" />
</Target>
<Target Name="PublishToAzureFeed"
DependsOnTargets="_CheckFilesToPublish"
Condition="'$(PublishToAzureFeed)' == 'true'">
<PropertyGroup>
<!--
Allow setting AzureBlobRelativePathBase to control the base path of all uploaded blobs.
AzureBlobRelativePathBase should end in a slash.
-->
<AzureBlobRelativePathBase Condition="'$(AzureBlobRelativePathBase)' != '' AND !HasTrailingSlash('$(AzureBlobRelativePathBase)')">$(AzureBlobRelativePathBase)/</AzureBlobRelativePathBase>
</PropertyGroup>
<ItemGroup Condition=" '$(AzureBlobRelativePathBase)' != '' ">
<FilesToPublish Update="@(FilesToPublish)" RelativeBlobPath="$(AzureBlobRelativePathBase)%(FilesToPublish.RelativeBlobPath)" />
</ItemGroup>
<RepoTasks.PublishToAzureBlob
AccountName="$(AzureAccountName)"
SharedAccessToken="$(AzureSharedAccessToken)"
ContainerName="$(AzureContainerName)"
Files="@(FilesToPublish)" />
</Target>
<Target Name="PublishToTransportFeed"
DependsOnTargets="ResolveCommitHash;GetFilesToPublish;_CheckFilesToPublish"
Condition="'$(PublishToTransportFeed)' == 'true'">
<ItemGroup>
<PackageToPublishToTransport
Include="@(PackageToPublish)"
Condition="'%(PackageToPublish.Category)' == 'ship'" />
<PackageToPublishToTransport
Include="@(PackageToPublish)"
ManifestArtifactData="NonShipping=true"
Condition="'%(PackageToPublish.Category)' != 'ship'" />
<!-- Filter aliased artifacts to workaround dotnet/buildtools#1855 -->
<FilesToPublishToTransport Include="@(FilesToPublish)"
RelativeBlobPath="$(BlobFileRelativePathBase)%(FilesToPublish.RelativeBlobPath)"
ManifestArtifactData="%(FilesToPublish.ManifestArtifactData)"
Condition=" '%(FilesToPublish.IsDuplicateUpload)' != 'true' " />
</ItemGroup>
<PushToBlobFeed ExpectedFeedUrl="$(PublishBlobFeedUrl)"
AccountKey="$(PublishBlobFeedKey)"
ItemsToPush="@(PackageToPublishToTransport)"
Overwrite="$(PushToBlobFeed_Overwrite)"
ManifestBuildId="$(Version)"
ManifestBuildData="ProductVersion=$(PackageVersion);UniverseCommitHash=$(CommitHash)"
ManifestCommit="$(CommitHash)"
ManifestName="aspnet"
MaxClients="$(PushToBlobFeed_MaxClients)"
Condition="@(PackageToPublish->Count()) != 0" />
<PushToBlobFeed ExpectedFeedUrl="$(PublishBlobFeedUrl)"
AccountKey="$(PublishBlobFeedKey)"
ItemsToPush="@(FilesToPublishToTransport)"
PublishFlatContainer="true"
Overwrite="$(PushToBlobFeed_Overwrite)"
ManifestBuildId="$(Version)"
ManifestBuildData="ProductVersion=$(PackageVersion);UniverseCommitHash=$(CommitHash)"
ManifestCommit="$(CommitHash)"
ManifestName="aspnet"
MaxClients="$(PushToBlobFeed_MaxClients)" />
</Target>
</Project>