<?xml version="1.0" encoding="utf-8"?> <!-- Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the MIT license. See License.txt in the project root for full license information. --> <Project> <PropertyGroup> <Product>Sdk</Product> <BlobStoragePartialRelativePath>$(Product)</BlobStoragePartialRelativePath> <BlobStoragePartialRelativePath Condition="'$(IsNotOrchestratedPublish)' == 'false'">assets/$(Product)</BlobStoragePartialRelativePath> <ChecksumsFeedUrl>$(DotnetPublishChecksumsBlobFeedUrl)</ChecksumsFeedUrl> <SdkAssetsFeedUrl>$(DotnetPublishSdkAssetsBlobFeedUrl)</SdkAssetsFeedUrl> <PublishSdkAssetsAndChecksumsToBlob>false</PublishSdkAssetsAndChecksumsToBlob> <PublishSdkAssetsAndChecksumsToBlob Condition=" '$(ChecksumsFeedUrl)' != '' and '$(SdkAssetsFeedUrl)' != '' ">true</PublishSdkAssetsAndChecksumsToBlob> <PublishBinariesAndBadge Condition=" '$(PublishBinariesAndBadge)' == '' ">true</PublishBinariesAndBadge> </PropertyGroup> <Import Project="$(NuGetPackageRoot)microsoft.dotnet.build.tasks.feed\$(MicrosoftDotNetBuildTasksFeedVersion)\build\Microsoft.DotNet.Build.Tasks.Feed.targets" Condition=" '$(PublishSdkAssetsAndChecksumsToBlob)' == 'true' " /> <PropertyGroup> <!-- Because we may be building in a container, we should use an asset manifest file path that exists in the container. Disambiguate the manifests via available properties. AGENT_OS and AGENT_JOBNAME are present on Azure DevOps agents --> <AssetManifestFileName Condition="'$(AGENT_OS)' != ''">$(AGENT_OS)</AssetManifestFileName> <AssetManifestFileName Condition="'$(AGENT_OS)' == ''">$(OS)</AssetManifestFileName> <AssetManifestFileName Condition="'$(AGENT_JOBNAME)' != ''">$(AssetManifestFileName)-$(AGENT_JOBNAME)</AssetManifestFileName> <AssetManifestFileName Condition="'$(AGENT_JOBNAME)' == '' and '$(Architecture)' != ''">$(AssetManifestFileName)-$(Architecture)</AssetManifestFileName> <ChecksumsAssetManifestFileName>$(AssetManifestFileName)-checksums</ChecksumsAssetManifestFileName> <!-- Property AssetManifestFilePath will be reassigned by the Arcade SDK, so use a different name (DotNetAssetManifestFilePath) --> <DotNetAssetManifestFilePath>$(ArtifactsLogDir)AssetManifest\$(AssetManifestFileName).xml</DotNetAssetManifestFilePath> <ChecksumsAssetManifestFilePath>$(ArtifactsLogDir)AssetManifest\$(ChecksumsAssetManifestFileName).xml</ChecksumsAssetManifestFilePath> <DotnetTempWorkingDirectory>$(ArtifactsDir)..\DotnetAssetsTmpDir\$([System.Guid]::NewGuid())</DotnetTempWorkingDirectory> <ChecksumTempWorkingDirectory>$(ArtifactsDir)..\ChecksumAssetsTmpDir\$([System.Guid]::NewGuid())</ChecksumTempWorkingDirectory> </PropertyGroup> <ItemGroup> <SdkAssetsToPublish Include="$(ArtifactsShippingPackagesDir)*.zip" Condition=" '$(PublishBinariesAndBadge)' == 'true' " /> <SdkAssetsToPublish Include="$(ArtifactsShippingPackagesDir)*.tar.gz" Condition=" '$(PublishBinariesAndBadge)' == 'true' " /> <SdkAssetsToPublish Include="$(ArtifactsShippingPackagesDir)*.pkg" /> <SdkAssetsToPublish Include="$(ArtifactsShippingPackagesDir)*.exe" /> <SdkAssetsToPublish Include="$(ArtifactsShippingPackagesDir)*.deb" /> <SdkAssetsToPublish Include="$(ArtifactsShippingPackagesDir)*.rpm" /> <SdkAssetsToPublish Include="$(ArtifactsShippingPackagesDir)*.msi" /> <SdkAssetsToPublish Include="$(ArtifactsShippingPackagesDir)*.nupkg" /> <SdkAssetsToPublish Include="$(ArtifactsShippingPackagesDir)*.cab" /> <SdkAssetsToPublish Include="$(ArtifactsShippingPackagesDir)*.svg" Condition=" '$(PublishBinariesAndBadge)' == 'true' " /> <SdkNonShippingAssetsToPublish Include="$(ArtifactsNonShippingPackagesDir)*.nupkg" /> <SdkNonShippingAssetsToPublish Include="$(ArtifactsNonShippingPackagesDir)*.swr" /> <CheckSumsToPublish Include="$(ArtifactsShippingPackagesDir)*.sha" /> <CheckSumsToPublish Remove="$(ArtifactsShippingPackagesDir)*.zip.sha" Condition=" '$(PublishBinariesAndBadge)' == 'false' "/> <CheckSumsToPublish Remove="$(ArtifactsShippingPackagesDir)*.tar.gz.sha" Condition=" '$(PublishBinariesAndBadge)' == 'false' "/> </ItemGroup> <Target Name="PublishSdkAssetsAndChecksums" BeforeTargets="Publish" Condition=" '$(PublishSdkAssetsAndChecksumsToBlob)' == 'true' "> <ReadLinesFromFile File="$(ArtifactsTmpDir)FullNugetVersion.version"> <Output TaskParameter="Lines" PropertyName="FullNugetVersion"/> </ReadLinesFromFile> <!-- If the sdk version is stabilized, then we should double publish the binaries to suffixed file names. To do this, create new copies of the blobs, replacing the SdkVersion string in the file name with the FullNugetVersion, except if the FullNuGetVersion is already in the file name (which would end up publishing the same exact file name twice). --> <ItemGroup Condition="'$(DotNetFinalVersionKind)'== 'release'"> <SdkAssetsToCopyWithSuffix Include="@(SdkAssetsToPublish)" Condition="'$([System.String]::Copy(`%(Filename)`).Contains(`$(Version)`))' == 'true'"> <SuffixedPath>$(ArtifactsShippingPackagesDir)/$([System.String]::Copy('%(Filename)%(Extension)').Replace('$(Version)' ,'$(FullNuGetVersion)'))</SuffixedPath> </SdkAssetsToCopyWithSuffix> <CheckSumsToCopyWithSuffix Include="@(CheckSumsToPublish)" Condition="'$([System.String]::Copy(`%(Filename)`).Contains(`$(Version)`))' == 'true'"> <SuffixedPath>$(ArtifactsShippingPackagesDir)/$([System.String]::Copy('%(Filename)%(Extension)').Replace('$(Version)' ,'$(FullNuGetVersion)'))</SuffixedPath> </CheckSumsToCopyWithSuffix> </ItemGroup> <Copy SourceFiles="@(SdkAssetsToCopyWithSuffix -> '%(Identity)')" DestinationFiles="@(SdkAssetsToCopyWithSuffix -> '%(SuffixedPath)')"> <Output TaskParameter="CopiedFiles" ItemName="SdkAssetsToPublishWithSuffix" /> </Copy> <Copy SourceFiles="@(CheckSumsToCopyWithSuffix -> '%(Identity)')" DestinationFiles="@(CheckSumsToCopyWithSuffix -> '%(SuffixedPath)')"> <Output TaskParameter="CopiedFiles" ItemName="CheckSumsToPublishWithSuffix" /> </Copy> <ItemGroup> <!-- Always publish blobs to a suffixed directory. --> <SdkAssetsToPushToBlobFeed Include="@(SdkAssetsToPublish)"> <RelativeBlobPath>$(BlobStoragePartialRelativePath)/$(FullNugetVersion)/$([System.String]::Copy('%(Filename)%(Extension)'))</RelativeBlobPath> </SdkAssetsToPushToBlobFeed> <SdkAssetsToPushToBlobFeed Include="@(SdkNonShippingAssetsToPublish)"> <RelativeBlobPath>$(BlobStoragePartialRelativePath)/$(FullNugetVersion)/$([System.String]::Copy('%(Filename)%(Extension)'))</RelativeBlobPath> <ManifestArtifactData>NonShipping=true</ManifestArtifactData> </SdkAssetsToPushToBlobFeed> <ChecksumsToPushToBlobFeed Include="@(CheckSumsToPublish)"> <RelativeBlobPath>$(BlobStoragePartialRelativePath)/$(FullNugetVersion)/$([System.String]::Copy('%(Filename)%(Extension)'))</RelativeBlobPath> </ChecksumsToPushToBlobFeed> <SdkAssetsWithSuffixToPushToBlobFeed Include="@(SdkAssetsToPublishWithSuffix)"> <RelativeBlobPath>$(BlobStoragePartialRelativePath)/$(FullNugetVersion)/$([System.String]::Copy('%(Filename)%(Extension)'))</RelativeBlobPath> <ManifestArtifactData>NonShipping=true</ManifestArtifactData> </SdkAssetsWithSuffixToPushToBlobFeed> <ChecksumsWithSuffixToPushToBlobFeed Include="@(CheckSumsToPublishWithSuffix)" Condition="'$(DotNetFinalVersionKind)'== 'release'"> <RelativeBlobPath>$(BlobStoragePartialRelativePath)/$(FullNugetVersion)/$([System.String]::Copy('%(Filename)%(Extension)'))</RelativeBlobPath> <ManifestArtifactData>NonShipping=true</ManifestArtifactData> </ChecksumsWithSuffixToPushToBlobFeed> </ItemGroup> <MakeDir Directories="$(DotnetTempWorkingDirectory)"/> <MakeDir Directories="$(ChecksumTempWorkingDirectory)"/> <PushToAzureDevOpsArtifacts ItemsToPush="@(SdkAssetsToPushToBlobFeed);@(SdkAssetsWithSuffixToPushToBlobFeed)" ManifestBuildData="Location=$(SdkAssetsFeedUrl)" ManifestRepoUri="$(BUILD_REPOSITORY_URI)" ManifestBranch="$(BUILD_SOURCEBRANCH)" ManifestBuildId="$(BUILD_BUILDNUMBER)" ManifestCommit="$(BUILD_SOURCEVERSION)" AssetManifestPath="$(DotNetAssetManifestFilePath)" PublishFlatContainer="true" AssetsTemporaryDirectory="$(DotnetTempWorkingDirectory)" /> <PushToAzureDevOpsArtifacts ItemsToPush="@(ChecksumsToPushToBlobFeed);@(ChecksumsWithSuffixToPushToBlobFeed)" ManifestBuildData="Location=$(ChecksumsFeedUrl)" ManifestRepoUri="$(BUILD_REPOSITORY_URI)" ManifestBranch="$(BUILD_SOURCEBRANCH)" ManifestBuildId="$(BUILD_BUILDNUMBER)" ManifestCommit="$(BUILD_SOURCEVERSION)" AssetManifestPath="$(ChecksumsAssetManifestFilePath)" PublishFlatContainer="true" AssetsTemporaryDirectory="$(ChecksumTempWorkingDirectory)" /> <Copy SourceFiles="$(DotNetAssetManifestFilePath)" DestinationFolder="$(DotnetTempWorkingDirectory)\$(AssetManifestFileName)" /> <Copy SourceFiles="$(ChecksumsAssetManifestFilePath)" DestinationFolder="$(ChecksumTempWorkingDirectory)\$(ChecksumsAssetManifestFileName)" /> <Message Text="##vso[artifact.upload containerfolder=AssetManifests;artifactname=AssetManifests]$(DotnetTempWorkingDirectory)/$(AssetManifestFileName)" Importance="high" /> <Message Text="##vso[artifact.upload containerfolder=AssetManifests;artifactname=AssetManifests]$(ChecksumTempWorkingDirectory)/$(ChecksumsAssetManifestFileName)" Importance="high" /> </Target> </Project>