diff --git a/eng/Publishing.props b/eng/Publishing.props
index a5b86c8b8da..9b46fc8f629 100644
--- a/eng/Publishing.props
+++ b/eng/Publishing.props
@@ -34,15 +34,12 @@
- <_ArchiveFiles Include="$(ArtifactsPackagesDir)\**\aspire-cli-*.zip" />
- <_ArchiveFiles Include="$(ArtifactsPackagesDir)\**\aspire-cli-*.tar.gz" />
-
- <_ArchiveFiles Include="$(_SignedArchivesDir)\**\aspire-cli-*.zip" />
- <_ArchiveFiles Include="$(_SignedArchivesDir)\**\aspire-cli-*.tar.gz" />
<_ExtensionFilesToPublish Include="$(ArtifactsPackagesDir)**\aspire-vscode-*.vsix" />
<_ExtensionManifestFiles Include="$(ArtifactsPackagesDir)**\aspire-vscode-*.manifest" />
<_ExtensionSignatureFiles Include="$(ArtifactsPackagesDir)**\aspire-vscode-*.signature.p7s" />
+ <_CliToolPackagesToPublish Include="$(ArtifactsShippingPackagesDir)**\Aspire.Cli*.nupkg"
+ Exclude="$(ArtifactsShippingPackagesDir)**\*.symbols.nupkg" />
+ <_CliPackProjects Include="$(RepoRoot)eng\clipack\Aspire.Cli.*.csproj" />
+ <_ExpectedCliRids Include="@(_CliPackProjects->'%(Filename)'->Replace('Aspire.Cli.', ''))" />
+
+
+
+ <_ArchiveFiles Include="$(ArtifactsPackagesDir)\**\aspire-cli-*.zip" />
+ <_ArchiveFiles Include="$(ArtifactsPackagesDir)\**\aspire-cli-*.tar.gz" />
+
+ <_ArchiveFiles Include="$(_SignedArchivesDir)\**\aspire-cli-*.zip" />
+ <_ArchiveFiles Include="$(_SignedArchivesDir)\**\aspire-cli-*.tar.gz" />
+
<_ArchiveFilesWithRid Include="@(_ArchiveFiles)">
$([System.Text.RegularExpressions.Regex]::Match(%(_ArchiveFiles.FileName), 'aspire-cli-(.*)-\d+.*').Groups[1].Value)
- <_CliPackProjects Include="$(RepoRoot)eng\clipack\Aspire.Cli.*.csproj" />
- <_ExpectedRids Include="@(_CliPackProjects->'%(Filename)'->Replace('Aspire.Cli.', ''))" />
+ <_MissingArchiveRids Include="@(_ExpectedCliRids)" Exclude="@(_ArchiveFilesWithRid -> '%(ExtractedRid)')" />
+ <_UnexpectedArchiveRids Include="@(_ArchiveFilesWithRid -> '%(ExtractedRid)')" Exclude="@(_ExpectedCliRids)" />
+
+
+
+ <_CliRidSpecificToolPackageFiles Include="@(_CliToolPackagesToPublish)"
+ Condition="!$([System.Text.RegularExpressions.Regex]::IsMatch('%(_CliToolPackagesToPublish.FileName)', '^Aspire\.Cli\.\d'))" />
- <_MissingRids Include="@(_ExpectedRids)" Exclude="@(_ArchiveFilesWithRid -> '%(ExtractedRid)')" />
- <_UnexpectedRids Include="@(_ArchiveFilesWithRid -> '%(ExtractedRid)')" Exclude="@(_ExpectedRids)" />
+
+ <_CliRidSpecificToolPackageFilesWithRid Include="@(_CliRidSpecificToolPackageFiles)">
+
+ $([System.Text.RegularExpressions.Regex]::Match('%(_CliRidSpecificToolPackageFiles.FileName)', '^Aspire\.Cli\.(.*?)\.\d+.*').Groups[1].Value)
+
+
+ <_MissingCliPackageRids Include="@(_ExpectedCliRids)" Exclude="@(_CliRidSpecificToolPackageFilesWithRid -> '%(ExtractedRid)')" />
+ <_UnexpectedCliPackageRids Include="@(_CliRidSpecificToolPackageFilesWithRid -> '%(ExtractedRid)')" Exclude="@(_ExpectedCliRids)" />
+ <_CliPointerToolPackages Include="@(_CliToolPackagesToPublish)" Exclude="@(_CliRidSpecificToolPackageFilesWithRid)" />
-
-
+
+
+
+
+
@@ -108,7 +132,7 @@
-
+
<_ExtensionFilesToPublish Remove="@(_ExtensionFilesToPublish)" />
@@ -149,6 +173,10 @@
true
$(_UploadPathRoot)/$(_PackageVersion)/%(Filename)%(Extension)
+
+ true
+ Package
+
false
true
@@ -168,5 +196,23 @@
$(_UploadPathRoot)/$(_PackageVersion)/%(Filename)%(Extension)
+
+
+
+
+
+ <_PackageItemsToPush Include="@(ItemsToPushToBlobFeed)" Condition="'%(ItemsToPushToBlobFeed.Kind)' == 'Package'" />
+ <_ShippingPackageItemsToPush Include="@(_PackageItemsToPush)" Condition="'%(_PackageItemsToPush.IsShipping)' == 'true'" />
+ <_FlatBlobItemsToPush Include="@(ItemsToPushToBlobFeed)" Condition="'%(ItemsToPushToBlobFeed.Kind)' != 'Package' And '%(ItemsToPushToBlobFeed.PublishFlatContainer)' == 'true'" />
+ <_ShippingFlatBlobItemsToPush Include="@(_FlatBlobItemsToPush)" Condition="'%(_FlatBlobItemsToPush.IsShipping)' == 'true'" />
+ <_NonShippingFlatBlobItemsToPush Include="@(_FlatBlobItemsToPush)" Condition="'%(_FlatBlobItemsToPush.IsShipping)' != 'true'" />
+
+
+
+
+
+
+
diff --git a/eng/pipelines/azure-pipelines-unofficial.yml b/eng/pipelines/azure-pipelines-unofficial.yml
index dcd0c7ce260..910bd23d3bf 100644
--- a/eng/pipelines/azure-pipelines-unofficial.yml
+++ b/eng/pipelines/azure-pipelines-unofficial.yml
@@ -172,6 +172,36 @@ extends:
# validation (Homebrew cask audit, WinGet manifest) against published URLs.
targetPath: '$(Build.SourcesDirectory)/artifacts/signed-archives/$(_BuildConfig)'
+ - task: DownloadPipelineArtifact@2
+ displayName: 🟣Download Native CLI Tool Packages
+ inputs:
+ itemPattern: |
+ **/Aspire.Cli*.nupkg
+ targetPath: '$(Build.SourcesDirectory)/artifacts/native-cli-packages/$(_BuildConfig)'
+
+ - pwsh: |
+ $ErrorActionPreference = 'Stop'
+ $downloadRoot = "$(Build.SourcesDirectory)/artifacts/native-cli-packages/$(_BuildConfig)"
+ $shippingDir = "$(Build.SourcesDirectory)/artifacts/packages/$(_BuildConfig)/Shipping"
+ New-Item -ItemType Directory -Path $shippingDir -Force | Out-Null
+
+ $packages = @(Get-ChildItem -Path $downloadRoot -Filter "Aspire.Cli*.nupkg" -File -Recurse |
+ Where-Object { $_.Name -notmatch '\.symbols\.' } |
+ Sort-Object FullName)
+ if ($packages.Count -eq 0) {
+ throw "No native CLI tool packages were downloaded to $downloadRoot."
+ }
+
+ foreach ($packageGroup in $packages | Group-Object Name) {
+ $package = $packageGroup.Group[0]
+ if ($packageGroup.Count -gt 1) {
+ Write-Host "Using $($package.FullName) for duplicate package name $($packageGroup.Name)."
+ }
+
+ Copy-Item -LiteralPath $package.FullName -Destination (Join-Path $shippingDir $package.Name) -Force
+ }
+ displayName: 🟣Stage Native CLI Tool Packages
+
- task: PowerShell@2
displayName: 🟣List artifacts packages contents
inputs:
diff --git a/eng/pipelines/azure-pipelines.yml b/eng/pipelines/azure-pipelines.yml
index 543441fd527..ad0824a1d13 100644
--- a/eng/pipelines/azure-pipelines.yml
+++ b/eng/pipelines/azure-pipelines.yml
@@ -260,6 +260,36 @@ extends:
# validation (Homebrew cask audit, WinGet manifest) against published URLs.
targetPath: '$(Build.SourcesDirectory)/artifacts/signed-archives/$(_BuildConfig)'
+ - task: DownloadPipelineArtifact@2
+ displayName: 🟣Download Native CLI Tool Packages
+ inputs:
+ itemPattern: |
+ **/Aspire.Cli*.nupkg
+ targetPath: '$(Build.SourcesDirectory)/artifacts/native-cli-packages/$(_BuildConfig)'
+
+ - pwsh: |
+ $ErrorActionPreference = 'Stop'
+ $downloadRoot = "$(Build.SourcesDirectory)/artifacts/native-cli-packages/$(_BuildConfig)"
+ $shippingDir = "$(Build.SourcesDirectory)/artifacts/packages/$(_BuildConfig)/Shipping"
+ New-Item -ItemType Directory -Path $shippingDir -Force | Out-Null
+
+ $packages = @(Get-ChildItem -Path $downloadRoot -Filter "Aspire.Cli*.nupkg" -File -Recurse |
+ Where-Object { $_.Name -notmatch '\.symbols\.' } |
+ Sort-Object FullName)
+ if ($packages.Count -eq 0) {
+ throw "No native CLI tool packages were downloaded to $downloadRoot."
+ }
+
+ foreach ($packageGroup in $packages | Group-Object Name) {
+ $package = $packageGroup.Group[0]
+ if ($packageGroup.Count -gt 1) {
+ Write-Host "Using $($package.FullName) for duplicate package name $($packageGroup.Name)."
+ }
+
+ Copy-Item -LiteralPath $package.FullName -Destination (Join-Path $shippingDir $package.Name) -Force
+ }
+ displayName: 🟣Stage Native CLI Tool Packages
+
- task: PowerShell@2
displayName: 🟣List artifacts packages contents
inputs: