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 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 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' diff --git a/CHANGELOG/7.4.md b/CHANGELOG/7.4.md index 285ae0aa81d..6b0f73cc553 100644 --- a/CHANGELOG/7.4.md +++ b/CHANGELOG/7.4.md @@ -1,5 +1,38 @@ # 7.4 Changelog +## [7.4.17] + +### Code Cleanup + + + + +Remove the unused Publish-NugetToMyGet command from packaging module (#27574) + + + + +### Build and Packaging Improvements + + + + + +Update to .NET SDK 8.0.422 + + + + +Update branch for release (#27580) +Skip Store Publish when No Channel Selected (#27571) +Verify Apple codesign immediately after ESRP signing (#27540) +Remove unused step that clones Internal-PowerShellTeam-Tools repo in PMC publish pipeline (#27497) + + + + +[7.4.17]: https://github.com/PowerShell/PowerShell/compare/v7.4.16...v7.4.17 + ## [7.4.16] ### Engine Updates and Fixes 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 @@ - +
Publish-NugetToMyGet
Update to .NET SDK 8.0.422
Internal-PowerShellTeam-Tools