From 0423bf7475f9f9c366228ee58ac0e0f4d660c85e Mon Sep 17 00:00:00 2001 From: anamnavi Date: Fri, 30 Oct 2026 14:02:17 -0400 Subject: [PATCH 1/3] Add stage to publish Microsoft.PowerShell.Archive to CFS feed --- Archive-Release-Official.yml | 52 ++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/Archive-Release-Official.yml b/Archive-Release-Official.yml index b218851..ce148a1 100644 --- a/Archive-Release-Official.yml +++ b/Archive-Release-Official.yml @@ -10,6 +10,14 @@ parameters: # parameters are shown up in ADO UI in a build queue time displayName: 'Enable debug output' type: boolean default: false +- name: 'releaseCFS' + displayName: 'Publish to CFS feed' + type: boolean + default: false +- name: 'releasePSGallery' + displayName: 'Publish to PSGallery' + type: boolean + default: false variables: - name: DOTNET_CLI_TELEMETRY_OPTOUT @@ -160,9 +168,53 @@ extends: # Governed template expands from here which defines over all pipeline Contents: $(publishPath)\Microsoft.PowerShell.Archive.*.nupkg TargetFolder: $(ob_outputDirectory) + - stage: releaseCFS + displayName: 'Publish Package to CFS feed' + dependsOn: stagebuild + condition: and(succeeded(), ${{ eq(parameters.releaseCFS, true) }}) + jobs: + - job: releaseCFSJob + displayName: Publish to CFS feed + variables: + - name: ob_outputDirectory + value: '$(Build.ArtifactStagingDirectory)/ONEBRANCH_ARTIFACT' + pool: + type: windows + steps: + - task: DownloadPipelineArtifact@2 + inputs: + targetPath: '$(Pipeline.Workspace)' + artifact: drop_stagebuild_jobbuild + displayName: 'Download drop_stagebuild_jobbuild artifact that has .nupkg file needed' + - pwsh: | + Get-ChildItem '$(Pipeline.Workspace)' -Recurse | Out-String -Stream | write-Verbose -Verbose + displayName: 'Capture Workspace' + - pwsh: | + $publishNupkg = Get-ChildItem -Path '$(Pipeline.Workspace)\Microsoft.PowerShell.Archive\signed\PublishedNupkg\Microsoft.PowerShell.Archive.*.nupkg' -Recurse -File | Select-Object -First 1 + $pkgFound = Test-Path $publishNupkg + Write-Verbose -Verbose "pkg found: $pkgFound" + displayName: 'Verify downloaded .nupkg is present' + - task: NuGetAuthenticate@1 + displayName: 'Authenticate to external Azure Artifacts feed' + inputs: + azureDevOpsServiceConnection: 'mscodehub-PushToPSRelFeed-ADO' + feedUrl: 'https://pkgs.dev.azure.com/powershell-rel/PowerShell/_packaging/powershell-module-earlyaccess/nuget/v3/index.json' + - pwsh: | + $publishNupkg = Get-ChildItem -Path '$(Pipeline.Workspace)\Microsoft.PowerShell.Archive\signed\PublishedNupkg\Microsoft.PowerShell.Archive.*.nupkg' -Recurse -File | Select-Object -First 1 + if (-not $publishNupkg) + { + throw "No nupkg found under $(Pipeline.Workspace) matching Microsoft.PowerShell.Archive.*.nupkg" + } + $publishNupkgPath = $publishNupkg.FullName + Write-Verbose -Verbose "Package found at path: $publishNupkgPath" + $adoRepoUri = "https://pkgs.dev.azure.com/powershell-rel/PowerShell/_packaging/powershell-module-earlyaccess/nuget/v3/index.json" + dotnet nuget push $publishNupkgPath --source $adoRepoUri --api-key az --skip-duplicate + displayName: 'Push package to external Azure Artifacts feed' + - stage: release displayName: Release Microsoft.PowerShell.Archive dependsOn: stagebuild + condition: and(succeeded(), ${{ eq(parameters.releasePSGallery, true) }}) variables: version: $[ stageDependencies.build.main.outputs['package.version'] ] drop: $(Pipeline.Workspace)/drop_stagebuild_jobbuild From 85ee58526666e5b9abba4dea3411e27ea91ceeb5 Mon Sep 17 00:00:00 2001 From: anamnavi Date: Fri, 30 Oct 2026 14:11:45 -0400 Subject: [PATCH 2/3] Pin actions to their SHAs --- .github/workflows/test.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index e128077..6abd825 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -19,7 +19,7 @@ jobs: steps: - name: Checkout code - uses: actions/checkout@v4 + uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4 with: fetch-depth: 1000 @@ -43,7 +43,7 @@ jobs: } - name: Upload test results - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4 if: always() with: name: test-results-${{ matrix.os }} @@ -56,7 +56,7 @@ jobs: steps: - name: Checkout code - uses: actions/checkout@v4 + uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4 with: fetch-depth: 1000 @@ -80,7 +80,7 @@ jobs: } - name: Upload test results - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4 if: always() with: name: windows-powershell-test-results From 9781f7d4929a0b98a81cac91e8cc9de2ce96dc20 Mon Sep 17 00:00:00 2001 From: anamnavi Date: Mon, 2 Nov 2026 14:43:16 -0500 Subject: [PATCH 3/3] Increase timeout for relasing to PSGallery stage --- Archive-Release-Official.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Archive-Release-Official.yml b/Archive-Release-Official.yml index ce148a1..7ab47eb 100644 --- a/Archive-Release-Official.yml +++ b/Archive-Release-Official.yml @@ -225,13 +225,13 @@ extends: # Governed template expands from here which defines over all pipeline displayName: Manual validation pool: type: server - timeoutInMinutes: 1440 + timeoutInMinutes: 14400 steps: - task: ManualValidation@0 displayName: Wait 24 hours for validation inputs: instructions: Please validate the release - timeoutInMinutes: 1440 + timeoutInMinutes: 14400 - job: PSGalleryPublish displayName: Publish to PSGallery