From 9175e73c8d41defaee45e6237529f221b70489fe Mon Sep 17 00:00:00 2001 From: Patrick Meinecke Date: Fri, 22 May 2026 00:45:25 -0400 Subject: [PATCH 1/6] [release/v7.4.16] Remove unused step that clones `Internal-PowerShellTeam-Tools` repo in PMC publish pipeline (#27497) Co-authored-by: Anam Navied --- .pipelines/templates/release-prep-for-ev2.yml | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/.pipelines/templates/release-prep-for-ev2.yml b/.pipelines/templates/release-prep-for-ev2.yml index 8c81aa03df3..b2bfe3c74e2 100644 --- a/.pipelines/templates/release-prep-for-ev2.yml +++ b/.pipelines/templates/release-prep-for-ev2.yml @@ -59,20 +59,6 @@ stages: env: ob_restore_phase: true - - pwsh: | - $branch = 'mirror-target' - $gitArgs = "clone", - "--verbose", - "--branch", - "$branch", - "https://$(mscodehubCodeReadPat)@mscodehub.visualstudio.com/PowerShellCore/_git/Internal-PowerShellTeam-Tools", - '$(Pipeline.Workspace)/tools' - $gitArgs | Write-Verbose -Verbose - git $gitArgs - displayName: Clone Internal-PowerShellTeam-Tools from MSCodeHub - env: - ob_restore_phase: true - - pwsh: | Get-ChildItem Env: | Out-String -Stream | write-Verbose -Verbose displayName: 'Capture Environment Variables' From 28d9c377de86e9f7bfe69f3912584305a2fb92d7 Mon Sep 17 00:00:00 2001 From: Patrick Meinecke Date: Thu, 28 May 2026 15:02:17 -0400 Subject: [PATCH 2/6] [release/v7.4.17] Verify Apple codesign immediately after ESRP signing (#27540) Co-authored-by: Andy Jordan <2226434+andyleejordan@users.noreply.github.com> --- .pipelines/templates/mac.yml | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/.pipelines/templates/mac.yml b/.pipelines/templates/mac.yml index cd492994617..2231d668b48 100644 --- a/.pipelines/templates/mac.yml +++ b/.pipelines/templates/mac.yml @@ -184,4 +184,23 @@ jobs: Expand-Archive -Path $zipFile -DestinationPath $signedDir -Force -Verbose displayName: Expand Apple-signed Mach-O binaries into signed output + - pwsh: | + $signedDir = "$(ob_outputDirectory)/Signed-$(Runtime)" + $expected = 'Developer ID Application: Microsoft Corporation' + $missing = @() + Get-ChildItem $signedDir -Recurse -Include 'pwsh', '*.dylib' | ForEach-Object { + $bytes = [System.IO.File]::ReadAllBytes($_.FullName) + $text = [System.Text.Encoding]::Latin1.GetString($bytes) + if (-not $text.Contains($expected)) { + $missing += $_.FullName + Write-Host "##[error]Missing '$expected' signature in $($_.FullName)" + } else { + Write-Host "OK: $($_.FullName)" + } + } + if ($missing.Count -gt 0) { + throw "ESRP did not apply a Developer ID signature to $($missing.Count) file(s): $($missing -join ', ')" + } + displayName: 'Verify Developer ID signature on Mach-O binaries' + - template: /.pipelines/templates/step/finalize.yml@self From af4387b11666766b39c10ef8e6d944e540bc392f Mon Sep 17 00:00:00 2001 From: Travis Plunk Date: Tue, 9 Jun 2026 14:55:16 -0400 Subject: [PATCH 3/6] [release/v7.4.17] Skip Store Publish when No Channel Seleceted (#27571) Co-authored-by: Justin Chung <124807742+jshigetomi@users.noreply.github.com> Co-authored-by: Justin Chung --- .../templates/package-store-package.yml | 21 ++++++++++++++++--- .pipelines/templates/release-MSIX-Publish.yml | 14 ++++++++----- 2 files changed, 27 insertions(+), 8 deletions(-) diff --git a/.pipelines/templates/package-store-package.yml b/.pipelines/templates/package-store-package.yml index 6abddae6851..4ee2098332e 100644 --- a/.pipelines/templates/package-store-package.yml +++ b/.pipelines/templates/package-store-package.yml @@ -79,10 +79,24 @@ jobs: $currentChannel = if ($IsLTS) { 'LTS' } elseif ($IsStable) { 'Stable' } elseif ($IsPreview) { 'Preview' } - else { - Write-Error "No valid channel detected" - exit 1 + else { $null } + + if (-not $currentChannel) { + Write-Host "##[warning]No release channel selected (LTS/Stable/Preview all false). Skipping Store package creation." + Write-Host "##vso[task.setvariable variable=SkipStorePublish]true" + # Set channel flags so any downstream conditioned tasks evaluate to skip. + Write-Host "##vso[task.setvariable variable=LTS]false" + Write-Host "##vso[task.setvariable variable=STABLE]false" + Write-Host "##vso[task.setvariable variable=PREVIEW]false" + # Ensure the output directory exists so downstream artifact publishing does not fail. + $outputDirectory = "$(ob_outputDirectory)" + if (-not (Test-Path -LiteralPath $outputDirectory)) { + New-Item -ItemType Directory -Path $outputDirectory -Force | Out-Null } + return + } + + Write-Host "##vso[task.setvariable variable=SkipStorePublish]false" $config = $channelConfigs[$currentChannel] Write-Verbose -Verbose "Selected channel: $currentChannel" @@ -242,3 +256,4 @@ jobs: exit 1 } displayName: 'Upload StoreBroker Package' + condition: and(succeeded(), ne(variables['SkipStorePublish'], 'true')) diff --git a/.pipelines/templates/release-MSIX-Publish.yml b/.pipelines/templates/release-MSIX-Publish.yml index cbbdb70cc4f..a68755725ce 100644 --- a/.pipelines/templates/release-MSIX-Publish.yml +++ b/.pipelines/templates/release-MSIX-Publish.yml @@ -34,6 +34,7 @@ jobs: displayName: 'Capture ReleaseTag and Downloaded Packages' - task: PowerShell@2 + condition: or(eq(variables['LTS'], 'true'), eq(variables['STABLE'], 'true'), eq(variables['PREVIEW'], 'true')) inputs: targetType: inline script: | @@ -70,12 +71,13 @@ jobs: displayName: 'Add Changelog Link and Version Number to SBJSON' - task: PowerShell@2 + condition: or(eq(variables['LTS'], 'true'), eq(variables['STABLE'], 'true'), eq(variables['PREVIEW'], 'true')) inputs: targetType: inline script: | # Convert ADO variables to PowerShell boolean variables $IsLTS = '$(LTS)' -eq 'true' - $IsStable = '$(STABLE)' -eq 'true' + $IsStable = '$(STABLE)' -eq 'true' $IsPreview = '$(PREVIEW)' -eq 'true' Write-Verbose -Verbose "Channel Selection - LTS: $(LTS), Stable: $(STABLE), Preview: $(PREVIEW)" @@ -83,10 +85,12 @@ jobs: $currentChannel = if ($IsLTS) { 'LTS' } elseif ($IsStable) { 'Stable' } elseif ($IsPreview) { 'Preview' } - else { - Write-Error "No valid channel detected" - exit 1 - } + else { $null } + + if (-not $currentChannel) { + Write-Host "##[warning]No release channel selected (LTS/Stable/Preview all false). Skipping Store publish." + return + } # Assign AppID for Store-Publish Task $appID = $null From f3113ff234caac28f91d6f105905a0fdd5c2f859 Mon Sep 17 00:00:00 2001 From: Travis Plunk Date: Tue, 9 Jun 2026 14:56:15 -0400 Subject: [PATCH 4/6] [release/v7.4.17] Remove the unused `Publish-NugetToMyGet` command from packaging module (#27574) Co-authored-by: Dongbo Wang --- tools/packaging/packaging.psd1 | 1 - tools/packaging/packaging.psm1 | 36 ---------------------------------- 2 files changed, 37 deletions(-) diff --git a/tools/packaging/packaging.psd1 b/tools/packaging/packaging.psd1 index e5b7fb84dfc..de726976f3a 100644 --- a/tools/packaging/packaging.psd1 +++ b/tools/packaging/packaging.psd1 @@ -21,7 +21,6 @@ 'New-ILNugetPackageFromSource' 'New-PSBuildZip' 'New-PSSignedBuildZip' - 'Publish-NugetToMyGet' 'Start-PSPackage' 'Test-PackageManifest' 'Update-PSSignedBuildFolder' diff --git a/tools/packaging/packaging.psm1 b/tools/packaging/packaging.psm1 index ffdbdcc79fb..5ee78e53faf 100644 --- a/tools/packaging/packaging.psm1 +++ b/tools/packaging/packaging.psm1 @@ -3595,42 +3595,6 @@ function New-NugetPackage Pop-Location } -<# -.SYNOPSIS -Publish the specified Nuget Package to MyGet feed. - -.DESCRIPTION -The specified nuget package is published to the powershell.myget.org/powershell-core feed. - -.PARAMETER PackagePath -Path to the NuGet Package. - -.PARAMETER ApiKey -API key for powershell.myget.org -#> -function Publish-NugetToMyGet -{ - param( - [Parameter(Mandatory = $true)] - [string] $PackagePath, - - [Parameter(Mandatory = $true)] - [string] $ApiKey - ) - - $nuget = Get-Command -Type Application nuget -ErrorAction SilentlyContinue - - if ($null -eq $nuget) - { - throw 'nuget application is not available in PATH' - } - - Get-ChildItem $PackagePath | ForEach-Object { - Write-Log "Pushing $_ to PowerShell Myget" - Start-NativeExecution { nuget push $_.FullName -Source 'https://powershell.myget.org/F/powershell-core/api/v2/package' -ApiKey $ApiKey } > $null - } -} - function New-SubFolder { [CmdletBinding(SupportsShouldProcess=$true)] From c0ef94081389c2175970d4c5cbf3ff1d1621508f Mon Sep 17 00:00:00 2001 From: PowerShell Team Bot <69177312+pwshBot@users.noreply.github.com> Date: Tue, 9 Jun 2026 17:29:52 -0400 Subject: [PATCH 5/6] [release/v7.4.17] Update branch for release (#27580) --- CHANGELOG/v7.4/dependencychanges.json | 15 ++++++++++++++- DotnetRuntimeMetadata.json | 2 +- global.json | 2 +- .../Microsoft.PowerShell.Commands.Utility.csproj | 2 +- .../Microsoft.PowerShell.SDK.csproj | 6 +++--- .../BenchmarkDotNet.Extensions.csproj | 2 +- .../ResultsComparer/ResultsComparer.csproj | 2 +- ...icrosoft.PowerShell.NamedPipeConnection.csproj | 2 +- test/tools/TestService/TestService.csproj | 4 ++-- test/tools/WebListener/WebListener.csproj | 4 ++-- tools/cgmanifest/main/cgmanifest.json | 10 +++++----- 11 files changed, 32 insertions(+), 19 deletions(-) diff --git a/CHANGELOG/v7.4/dependencychanges.json b/CHANGELOG/v7.4/dependencychanges.json index 87e26784baa..7a9163f6085 100644 --- a/CHANGELOG/v7.4/dependencychanges.json +++ b/CHANGELOG/v7.4/dependencychanges.json @@ -23,6 +23,19 @@ "VulnerableRanges": [], "AdvisoryUrls": [], "Justification": "Updated .NET SDK. Building with the latest SDK is required.", - "TimestampUtc": "2026-05-18T22:44:49.1925230Z" + "TimestampUtc": "2026-05-18T22:44:49.192523Z" + }, + { + "ChangeType": "NonSecurity", + "Branch": "release/v7.4.17", + "PackageId": ".NET SDK", + "FromVersion": "8.0.421", + "ToVersion": "8.0.422", + "VulnerabilityId": [], + "Severity": [], + "VulnerableRanges": [], + "AdvisoryUrls": [], + "Justification": "Updated .NET SDK. Building with the latest SDK is required.", + "TimestampUtc": "2026-06-09T19:43:57.2589963Z" } ] diff --git a/DotnetRuntimeMetadata.json b/DotnetRuntimeMetadata.json index 1d3f25d6b3a..deee8625001 100644 --- a/DotnetRuntimeMetadata.json +++ b/DotnetRuntimeMetadata.json @@ -4,7 +4,7 @@ "quality": "daily", "qualityFallback": "preview", "packageVersionPattern": "8.0.0", - "sdkImageVersion": "8.0.421", + "sdkImageVersion": "8.0.422", "nextChannel": "8.0.1xx", "azureFeed": "", "sdkImageOverride": "" diff --git a/global.json b/global.json index 12e63e7d30c..a928aa42b4a 100644 --- a/global.json +++ b/global.json @@ -1,5 +1,5 @@ { "sdk": { - "version": "8.0.421" + "version": "8.0.422" } } diff --git a/src/Microsoft.PowerShell.Commands.Utility/Microsoft.PowerShell.Commands.Utility.csproj b/src/Microsoft.PowerShell.Commands.Utility/Microsoft.PowerShell.Commands.Utility.csproj index 1729abeffdb..3fb3edf9280 100644 --- a/src/Microsoft.PowerShell.Commands.Utility/Microsoft.PowerShell.Commands.Utility.csproj +++ b/src/Microsoft.PowerShell.Commands.Utility/Microsoft.PowerShell.Commands.Utility.csproj @@ -36,7 +36,7 @@ - + diff --git a/src/Microsoft.PowerShell.SDK/Microsoft.PowerShell.SDK.csproj b/src/Microsoft.PowerShell.SDK/Microsoft.PowerShell.SDK.csproj index 89f86d14c22..c720f292e7c 100644 --- a/src/Microsoft.PowerShell.SDK/Microsoft.PowerShell.SDK.csproj +++ b/src/Microsoft.PowerShell.SDK/Microsoft.PowerShell.SDK.csproj @@ -17,12 +17,12 @@ - + - + @@ -42,7 +42,7 @@ - +