From 4a08fb07b323328a4ae62be6855fc00630e56574 Mon Sep 17 00:00:00 2001 From: Andy Jordan <2226434+andyleejordan@users.noreply.github.com> Date: Wed, 3 Sep 2025 11:15:47 -0700 Subject: [PATCH 1/9] Update `InvokeBuild` module --- tools/installPSResources.ps1 | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tools/installPSResources.ps1 b/tools/installPSResources.ps1 index 3bb642ace..694798812 100644 --- a/tools/installPSResources.ps1 +++ b/tools/installPSResources.ps1 @@ -12,11 +12,11 @@ if ($PSRepository -eq "CFS" -and -not (Get-PSResourceRepository -Name CFS -Error # NOTE: Due to a bug in Install-PSResource with upstream feeds, we have to # request an exact version. Otherwise, if a newer version is available in the # upstream feed, it will fail to install any version at all. -Install-PSResource -Verbose -TrustRepository -RequiredResource @{ +Install-PSResource -Verbose -TrustRepository -RequiredResource @{ InvokeBuild = @{ - version = "5.12.1" + version = "5.14.18" repository = $PSRepository - } + } platyPS = @{ version = "0.14.2" repository = $PSRepository From ef7c8a6abcb6d7a36ea4f6e60339556e77e5d9a5 Mon Sep 17 00:00:00 2001 From: Andy Jordan <2226434+andyleejordan@users.noreply.github.com> Date: Wed, 3 Sep 2025 11:18:28 -0700 Subject: [PATCH 2/9] Update PSReadLine to include screen reader support --- PowerShellEditorServices.build.ps1 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PowerShellEditorServices.build.ps1 b/PowerShellEditorServices.build.ps1 index 79aabb815..14b80acce 100644 --- a/PowerShellEditorServices.build.ps1 +++ b/PowerShellEditorServices.build.ps1 @@ -122,7 +122,7 @@ task RestorePsesModules -If (-not (Test-Path "module/PSReadLine") -or -not (Test Write-Build DarkMagenta "Restoring bundled modules" # NOTE: When updating module versions, ensure they are also saved to the CFS feed Save-PSResource -Path module -Name PSScriptAnalyzer -Version "1.24.0" -Repository $PSRepository -TrustRepository -Verbose - Save-PSResource -Path module -Name PSReadLine -Version "2.4.2-beta2" -Prerelease -Repository $PSRepository -TrustRepository -Verbose + Save-PSResource -Path module -Name PSReadLine -Version "2.4.4-beta4" -Prerelease -Repository $PSRepository -TrustRepository -Verbose } Task Build FindDotNet, CreateBuildInfo, RestorePsesModules, { From 8850deaa953a6c9dfd84d8d240554261427fe520 Mon Sep 17 00:00:00 2001 From: Andy Jordan <2226434+andyleejordan@users.noreply.github.com> Date: Wed, 3 Sep 2025 11:26:24 -0700 Subject: [PATCH 3/9] Update NuGet packages --- Directory.Packages.props | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/Directory.Packages.props b/Directory.Packages.props index b90360e52..712512a3f 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -1,27 +1,27 @@ - - - - + + + + - + - + runtime; build; native; contentfiles; analyzers; buildtransitive all - + runtime; build; native; contentfiles; analyzers; buildtransitive all - + runtime; build; native; contentfiles; analyzers; buildtransitive all From 73089017a14cd0a4d32984f3a0e026c395226b31 Mon Sep 17 00:00:00 2001 From: Andy Jordan <2226434+andyleejordan@users.noreply.github.com> Date: Wed, 3 Sep 2025 11:31:19 -0700 Subject: [PATCH 4/9] Drop unnecessary install of .NET 6 It was being used for tests but that has already stopped. --- .pipelines/PowerShellEditorServices-Official.yml | 5 ----- 1 file changed, 5 deletions(-) diff --git a/.pipelines/PowerShellEditorServices-Official.yml b/.pipelines/PowerShellEditorServices-Official.yml index 02711b556..95ddd351d 100644 --- a/.pipelines/PowerShellEditorServices-Official.yml +++ b/.pipelines/PowerShellEditorServices-Official.yml @@ -83,11 +83,6 @@ extends: inputs: packageType: sdk useGlobalJson: true - - task: UseDotNet@2 - displayName: Use .NET 6.x runtime (for tests) - inputs: - packageType: runtime - version: 6.x - pwsh: ./tools/installPSResources.ps1 -PSRepository CFS displayName: Install PSResources - pwsh: Invoke-Build TestFull -Configuration $(BuildConfiguration) -PSRepository CFS From 5fbcc29cd03f3cb8023bd8a8e89bf588af7611a1 Mon Sep 17 00:00:00 2001 From: Andy Jordan <2226434+andyleejordan@users.noreply.github.com> Date: Wed, 3 Sep 2025 12:19:13 -0700 Subject: [PATCH 5/9] Conditionally use Official OneBranch template With NonOfficial available for testing. --- .pipelines/PowerShellEditorServices-Official.yml | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/.pipelines/PowerShellEditorServices-Official.yml b/.pipelines/PowerShellEditorServices-Official.yml index 95ddd351d..e37d0c771 100644 --- a/.pipelines/PowerShellEditorServices-Official.yml +++ b/.pipelines/PowerShellEditorServices-Official.yml @@ -24,6 +24,10 @@ parameters: displayName: Enable debug output type: boolean default: false +- name: OfficialBuild + displayName: Use Official OneBranch template + type: boolean + default: false variables: system.debug: ${{ parameters.debug }} @@ -31,6 +35,7 @@ variables: WindowsContainerImage: onebranch.azurecr.io/windows/ltsc2022/vse2022:latest DOTNET_NOLOGO: true DOTNET_GENERATE_ASPNET_CERTIFICATE: false + OneBranchTemplate: ${{ iif(parameters.OfficialBuild, 'v2/OneBranch.Official.CrossPlat.yml@templates', 'v2/OneBranch.NonOfficial.CrossPlat.yml@templates') }} resources: repositories: @@ -41,7 +46,7 @@ resources: extends: # https://aka.ms/obpipelines/templates - template: v2/OneBranch.Official.CrossPlat.yml@templates + template: ${{ variables.OneBranchTemplate }} parameters: globalSdl: # https://aka.ms/obpipelines/sdl asyncSdl: @@ -134,9 +139,9 @@ extends: archiveFile: out/PowerShellEditorServices.zip - stage: release dependsOn: build - condition: eq(variables['Build.Reason'], 'Manual') + condition: and(succeeded(), ${{ eq(parameters.OfficialBuild, true) }}) variables: - ob_release_environment: Production + ob_release_environment: ${{ iif(parameters.OfficialBuild, 'Production', 'Test') }} version: $[ stageDependencies.build.main.outputs['package.version'] ] prerelease: $[ stageDependencies.build.main.outputs['package.prerelease'] ] jobs: From 3867170f3b380fbbbe005a20d644ae804c3f95b0 Mon Sep 17 00:00:00 2001 From: Andy Jordan <2226434+andyleejordan@users.noreply.github.com> Date: Wed, 3 Sep 2025 12:21:18 -0700 Subject: [PATCH 6/9] Update GitHub service connection --- .pipelines/PowerShellEditorServices-Official.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.pipelines/PowerShellEditorServices-Official.yml b/.pipelines/PowerShellEditorServices-Official.yml index e37d0c771..b35a4b9a4 100644 --- a/.pipelines/PowerShellEditorServices-Official.yml +++ b/.pipelines/PowerShellEditorServices-Official.yml @@ -157,7 +157,7 @@ extends: - task: GitHubRelease@1 displayName: Create GitHub release inputs: - gitHubConnection: GitHub + gitHubConnection: github.com_andyleejordan repositoryName: PowerShell/PowerShellEditorServices target: main assets: $(Pipeline.Workspace)/PowerShellEditorServices.zip From bcec1498baec35e6610a6ff8845281e16912e1f9 Mon Sep 17 00:00:00 2001 From: Andy Jordan <2226434+andyleejordan@users.noreply.github.com> Date: Wed, 3 Sep 2025 12:25:22 -0700 Subject: [PATCH 7/9] Rename pipeline file Since it's shared. --- ...rvices-Official.yml => PowerShellEditorServices-OneBranch.yml} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename .pipelines/{PowerShellEditorServices-Official.yml => PowerShellEditorServices-OneBranch.yml} (100%) diff --git a/.pipelines/PowerShellEditorServices-Official.yml b/.pipelines/PowerShellEditorServices-OneBranch.yml similarity index 100% rename from .pipelines/PowerShellEditorServices-Official.yml rename to .pipelines/PowerShellEditorServices-OneBranch.yml From 373a09a2a0831c14cc7b2210ab9ae22f322c5560 Mon Sep 17 00:00:00 2001 From: Andy Jordan <2226434+andyleejordan@users.noreply.github.com> Date: Thu, 4 Sep 2025 11:55:23 -0700 Subject: [PATCH 8/9] Delete cron schedule Since we're reusing this YAML for the NonOfficial and Official pipelines, we can't use a YAML cron job for just one of them. Hence we'll schedule this job in the UI. --- .../PowerShellEditorServices-OneBranch.yml | 20 ++++++------------- 1 file changed, 6 insertions(+), 14 deletions(-) diff --git a/.pipelines/PowerShellEditorServices-OneBranch.yml b/.pipelines/PowerShellEditorServices-OneBranch.yml index b35a4b9a4..4e3387d55 100644 --- a/.pipelines/PowerShellEditorServices-OneBranch.yml +++ b/.pipelines/PowerShellEditorServices-OneBranch.yml @@ -11,13 +11,12 @@ trigger: - main -schedules: -- cron: '35 13 * * 4' - displayName: Weekly CodeQL - branches: - include: - - main - always: true +resources: + repositories: + - repository: templates + type: git + name: OneBranch.Pipelines/GovernedTemplates + ref: refs/heads/main parameters: - name: debug @@ -37,13 +36,6 @@ variables: DOTNET_GENERATE_ASPNET_CERTIFICATE: false OneBranchTemplate: ${{ iif(parameters.OfficialBuild, 'v2/OneBranch.Official.CrossPlat.yml@templates', 'v2/OneBranch.NonOfficial.CrossPlat.yml@templates') }} -resources: - repositories: - - repository: templates - type: git - name: OneBranch.Pipelines/GovernedTemplates - ref: refs/heads/main - extends: # https://aka.ms/obpipelines/templates template: ${{ variables.OneBranchTemplate }} From b7e001ecda4ede7c940f79646f8444de16e84eec Mon Sep 17 00:00:00 2001 From: Andy Jordan <2226434+andyleejordan@users.noreply.github.com> Date: Thu, 4 Sep 2025 14:16:55 -0700 Subject: [PATCH 9/9] User Prettier to fix inconsistent list indentation --- .../PowerShellEditorServices-OneBranch.yml | 232 +++++++++--------- 1 file changed, 116 insertions(+), 116 deletions(-) diff --git a/.pipelines/PowerShellEditorServices-OneBranch.yml b/.pipelines/PowerShellEditorServices-OneBranch.yml index 4e3387d55..a10cc28d5 100644 --- a/.pipelines/PowerShellEditorServices-OneBranch.yml +++ b/.pipelines/PowerShellEditorServices-OneBranch.yml @@ -9,7 +9,7 @@ ################################################################################# trigger: -- main + - main resources: repositories: @@ -19,14 +19,14 @@ resources: ref: refs/heads/main parameters: -- name: debug - displayName: Enable debug output - type: boolean - default: false -- name: OfficialBuild - displayName: Use Official OneBranch template - type: boolean - default: false + - name: debug + displayName: Enable debug output + type: boolean + default: false + - name: OfficialBuild + displayName: Use Official OneBranch template + type: boolean + default: false variables: system.debug: ${{ parameters.debug }} @@ -52,111 +52,111 @@ extends: release: category: NonAzure stages: - - stage: build - jobs: - - job: main - displayName: Build package - pool: - type: windows + - stage: build + jobs: + - job: main + displayName: Build package + pool: + type: windows + variables: + ob_outputDirectory: $(Build.SourcesDirectory)/out + steps: + - pwsh: | + [xml]$xml = Get-Content PowerShellEditorServices.Common.props + $version = $xml.Project.PropertyGroup.VersionPrefix + $prerelease = $xml.Project.PropertyGroup.VersionSuffix + if ($prerelease) { $version += "-$prerelease" } + Write-Output "##vso[task.setvariable variable=version;isOutput=true]$version" + Write-Output "##vso[task.setvariable variable=prerelease;isOutput=true]$(-not [string]::IsNullOrEmpty($prerelease))" + name: package + displayName: Get version from project properties + - task: onebranch.pipeline.version@1 + displayName: Set OneBranch version + inputs: + system: Custom + customVersion: $(package.version) + - task: UseDotNet@2 + displayName: Use .NET 8.x SDK + inputs: + packageType: sdk + useGlobalJson: true + - pwsh: ./tools/installPSResources.ps1 -PSRepository CFS + displayName: Install PSResources + - pwsh: Invoke-Build TestFull -Configuration $(BuildConfiguration) -PSRepository CFS + displayName: Build and test + - task: PublishTestResults@2 + displayName: Publish test results + inputs: + testRunner: VSTest + testResultsFiles: "**/*.trx" + failTaskOnFailedTests: true + - pwsh: | + $assembly = [Reflection.Assembly]::LoadFile("$(Build.SourcesDirectory)/module/PowerShellEditorServices/bin/Core/Microsoft.PowerShell.EditorServices.Hosting.dll") + if ($assembly.GetCustomAttributes([System.Diagnostics.DebuggableAttribute], $true).IsJITOptimizerDisabled) { + Write-Host "##vso[task.LogIssue type=error;]Was not built in release configuration!" + exit 1 + } + displayName: Assert release configuration + continueOnError: true + - task: onebranch.pipeline.signing@1 + displayName: Sign 1st-party files + inputs: + command: sign + signing_profile: external_distribution + search_root: $(Build.SourcesDirectory)/module + files_to_sign: | + **/*.ps1; + **/*.psd1; + **/*.psm1; + **/*.ps1xml; + **/Microsoft.PowerShell.EditorServices*.dll; + - task: onebranch.pipeline.signing@1 + displayName: Sign 3rd-party files + inputs: + command: sign + signing_profile: 135020002 + search_root: $(Build.SourcesDirectory)/module + files_to_sign: | + **/MediatR.dll; + **/Nerdbank.Streams.dll; + **/Newtonsoft.Json.dll; + **/OmniSharp.Extensions*.dll; + **/System.Reactive.dll; + - task: ArchiveFiles@2 + displayName: Zip signed artifacts + inputs: + rootFolderOrFile: $(Build.SourcesDirectory)/module + includeRootFolder: false + archiveType: zip + archiveFile: out/PowerShellEditorServices.zip + - stage: release + dependsOn: build + condition: and(succeeded(), ${{ eq(parameters.OfficialBuild, true) }}) variables: - ob_outputDirectory: $(Build.SourcesDirectory)/out - steps: - - pwsh: | - [xml]$xml = Get-Content PowerShellEditorServices.Common.props - $version = $xml.Project.PropertyGroup.VersionPrefix - $prerelease = $xml.Project.PropertyGroup.VersionSuffix - if ($prerelease) { $version += "-$prerelease" } - Write-Output "##vso[task.setvariable variable=version;isOutput=true]$version" - Write-Output "##vso[task.setvariable variable=prerelease;isOutput=true]$(-not [string]::IsNullOrEmpty($prerelease))" - name: package - displayName: Get version from project properties - - task: onebranch.pipeline.version@1 - displayName: Set OneBranch version - inputs: - system: Custom - customVersion: $(package.version) - - task: UseDotNet@2 - displayName: Use .NET 8.x SDK - inputs: - packageType: sdk - useGlobalJson: true - - pwsh: ./tools/installPSResources.ps1 -PSRepository CFS - displayName: Install PSResources - - pwsh: Invoke-Build TestFull -Configuration $(BuildConfiguration) -PSRepository CFS - displayName: Build and test - - task: PublishTestResults@2 - displayName: Publish test results - inputs: - testRunner: VSTest - testResultsFiles: '**/*.trx' - failTaskOnFailedTests: true - - pwsh: | - $assembly = [Reflection.Assembly]::LoadFile("$(Build.SourcesDirectory)/module/PowerShellEditorServices/bin/Core/Microsoft.PowerShell.EditorServices.Hosting.dll") - if ($assembly.GetCustomAttributes([System.Diagnostics.DebuggableAttribute], $true).IsJITOptimizerDisabled) { - Write-Host "##vso[task.LogIssue type=error;]Was not built in release configuration!" - exit 1 - } - displayName: Assert release configuration - continueOnError: true - - task: onebranch.pipeline.signing@1 - displayName: Sign 1st-party files - inputs: - command: sign - signing_profile: external_distribution - search_root: $(Build.SourcesDirectory)/module - files_to_sign: | - **/*.ps1; - **/*.psd1; - **/*.psm1; - **/*.ps1xml; - **/Microsoft.PowerShell.EditorServices*.dll; - - task: onebranch.pipeline.signing@1 - displayName: Sign 3rd-party files - inputs: - command: sign - signing_profile: 135020002 - search_root: $(Build.SourcesDirectory)/module - files_to_sign: | - **/MediatR.dll; - **/Nerdbank.Streams.dll; - **/Newtonsoft.Json.dll; - **/OmniSharp.Extensions*.dll; - **/System.Reactive.dll; - - task: ArchiveFiles@2 - displayName: Zip signed artifacts - inputs: - rootFolderOrFile: $(Build.SourcesDirectory)/module - includeRootFolder: false - archiveType: zip - archiveFile: out/PowerShellEditorServices.zip - - stage: release - dependsOn: build - condition: and(succeeded(), ${{ eq(parameters.OfficialBuild, true) }}) - variables: - ob_release_environment: ${{ iif(parameters.OfficialBuild, 'Production', 'Test') }} - version: $[ stageDependencies.build.main.outputs['package.version'] ] - prerelease: $[ stageDependencies.build.main.outputs['package.prerelease'] ] - jobs: - - job: github - displayName: Publish draft to GitHub - pool: - type: release - templateContext: - inputs: - - input: pipelineArtifact - artifactName: drop_build_main - steps: - - task: GitHubRelease@1 - displayName: Create GitHub release - inputs: - gitHubConnection: github.com_andyleejordan - repositoryName: PowerShell/PowerShellEditorServices - target: main - assets: $(Pipeline.Workspace)/PowerShellEditorServices.zip - tagSource: userSpecifiedTag - tag: v$(version) - isDraft: true - isPreRelease: $(prerelease) - addChangeLog: false - releaseNotesSource: inline - releaseNotesInline: "" + ob_release_environment: ${{ iif(parameters.OfficialBuild, 'Production', 'Test') }} + version: $[ stageDependencies.build.main.outputs['package.version'] ] + prerelease: $[ stageDependencies.build.main.outputs['package.prerelease'] ] + jobs: + - job: github + displayName: Publish draft to GitHub + pool: + type: release + templateContext: + inputs: + - input: pipelineArtifact + artifactName: drop_build_main + steps: + - task: GitHubRelease@1 + displayName: Create GitHub release + inputs: + gitHubConnection: github.com_andyleejordan + repositoryName: PowerShell/PowerShellEditorServices + target: main + assets: $(Pipeline.Workspace)/PowerShellEditorServices.zip + tagSource: userSpecifiedTag + tag: v$(version) + isDraft: true + isPreRelease: $(prerelease) + addChangeLog: false + releaseNotesSource: inline + releaseNotesInline: ""