mirror of
https://github.com/microsoft/PowerToys.git
synced 2025-12-15 11:17:53 +01:00
<!-- Enter a brief description/summary of your PR here. What does it fix/what does it change/how was it tested (even manually, if necessary)? --> ## Summary of the Pull Request Background: The current PowerToys installer is built using Wix3, which has now been deprecated. To improve security, service quality, and community support, we’re upgrading the installer to Wix5. Implementation: Created Wix5-based projects(PowerToysSetupVext and PowerToysSetupCustomActionsVNext) within the installer while retaining the existing Wix3 project. Both versions are built to generate separate installation packages. The Wix3-related code will be removed after successful release testing confirms no issues. Special case: Wix5 has removed the property for 'ShowFilesInUse'. Now, whenever a file is in use during installation, a FilesInUse pop-upwill automatically appear asking for the next step. To ensure this doesn't interfere with scenarios that require silent installation (e.g. Winget method), we’ve handled it using the bafunction approach. <!-- Please review the items on the PR checklist before submitting--> ## PR Checklist - [ ] Closes: #xxx - [ ] **Communication:** I've discussed this with core contributors already. If the work hasn't been agreed, this work might be rejected - [ ] **Tests:** Added/updated and all pass - [ ] **Localization:** All end-user-facing strings can be localized - [ ] **Dev docs:** Added/updated - [ ] **New binaries:** Added on the required places - [ ] [JSON for signing](https://github.com/microsoft/PowerToys/blob/main/.pipelines/ESRPSigning_core.json) for new binaries - [ ] [WXS for installer](https://github.com/microsoft/PowerToys/blob/main/installer/PowerToysSetup/Product.wxs) for new binaries and localization folder - [ ] [YML for CI pipeline](https://github.com/microsoft/PowerToys/blob/main/.pipelines/ci/templates/build-powertoys-steps.yml) for new test projects - [ ] [YML for signed pipeline](https://github.com/microsoft/PowerToys/blob/main/.pipelines/release.yml) - [ ] **Documentation updated:** If checked, please file a pull request on [our docs repo](https://github.com/MicrosoftDocs/windows-uwp/tree/docs/hub/powertoys) and link it here: #xxx <!-- Provide a more detailed description of the PR, other things fixed, or any additional comments/features here --> ## Detailed Description of the Pull Request / Additional comments <!-- Describe how you validated the behavior. Add automated tests wherever possible, but list manual validation steps taken as well --> ## Validation Steps Performed --------- Co-authored-by: Jerry Xu <n.xu@outlook.com> Co-authored-by: Kai Tao <69313318+vanzue@users.noreply.github.com> Co-authored-by: leileizhang <leilzh@microsoft.com> Co-authored-by: Kai Tao (from Dev Box) <kaitao@microsoft.com> Co-authored-by: vanzue <vanzue@outlook.com>
165 lines
6.5 KiB
YAML
165 lines
6.5 KiB
YAML
trigger: none
|
|
pr: none
|
|
|
|
resources:
|
|
repositories:
|
|
- repository: 1ESPipelineTemplates
|
|
type: git
|
|
name: 1ESPipelineTemplates/1ESPipelineTemplates
|
|
ref: refs/tags/release
|
|
|
|
# Expose all of these parameters for user configuration.
|
|
parameters:
|
|
- name: publishSymbolsToPublic
|
|
displayName: "Publish Symbols to **PUBLIC** (use only for Final Builds)"
|
|
type: boolean
|
|
default: false
|
|
|
|
- name: versionNumber
|
|
displayName: "Version Number"
|
|
type: string
|
|
default: '0.0.1'
|
|
|
|
- name: installerSuffix
|
|
type: string
|
|
displayName: "WiX5 installer suffix (e.g., 'wix5', 'vnext', etc.)"
|
|
default: "wix5"
|
|
|
|
- name: buildConfigurations
|
|
displayName: "Build Configurations"
|
|
type: object
|
|
default:
|
|
- Release
|
|
|
|
- name: buildPlatforms
|
|
displayName: "Build Platforms"
|
|
type: object
|
|
default:
|
|
- x64
|
|
- arm64
|
|
|
|
- name: useVSPreview
|
|
type: boolean
|
|
displayName: "Build Using Visual Studio Preview"
|
|
default: false
|
|
|
|
- name: enableAOT
|
|
type: boolean
|
|
displayName: "Enable AOT (Ahead-of-Time) Compilation for CmdPal"
|
|
default: true
|
|
|
|
name: $(BuildDefinitionName)_$(date:yyMM).$(date:dd)$(rev:rrr)
|
|
|
|
variables:
|
|
- template: templates/variables-nuget-package-version.yml
|
|
|
|
extends:
|
|
template: v1/1ES.Official.PipelineTemplate.yml@1ESPipelineTemplates
|
|
parameters:
|
|
customBuildTags:
|
|
- 1ES.PT.ViaStartRight
|
|
pool:
|
|
name: SHINE-INT-S
|
|
${{ if eq(parameters.useVSPreview, true) }}:
|
|
demands: ImageOverride -equals SHINE-VS17-Preview
|
|
${{ else }}:
|
|
image: SHINE-VS17-Latest
|
|
os: windows
|
|
sdl:
|
|
tsa:
|
|
enabled: true
|
|
configFile: '$(Build.SourcesDirectory)\.pipelines\tsa.json'
|
|
binskim:
|
|
enabled: true
|
|
# Exclude every dll/exe in tests/*, as well as all msdia*, covrun* and vcruntime*
|
|
analyzeTargetGlob: +:file|$(Build.ArtifactStagingDirectory)/**/*.dll;+:file|$(Build.ArtifactStagingDirectory)/**/*.exe;-:file:regex|tests.*\.(dll|exe)$;-:file:regex|(covrun.*)\.dll$;-:file:regex|(msdia.*)\.dll$;-:file:regex|(vcruntime.*)\.dll$
|
|
|
|
stages:
|
|
- stage: Build
|
|
displayName: Build
|
|
dependsOn: []
|
|
jobs:
|
|
- template: .pipelines/v2/templates/job-build-project.yml@self
|
|
parameters:
|
|
pool:
|
|
name: SHINE-INT-L
|
|
${{ if eq(parameters.useVSPreview, true) }}:
|
|
demands: ImageOverride -equals SHINE-VS17-Preview
|
|
${{ else }}:
|
|
image: SHINE-VS17-Latest
|
|
os: windows
|
|
variables:
|
|
IsPipeline: 1 # The installer uses this to detect whether it should pick up localizations
|
|
SkipCppCodeAnalysis: 1 # Skip the code analysis to speed up release CI. It runs on PR CI, anyway
|
|
# IsExperimentationLive: 1 # The build and installer use this to turn on experimentation
|
|
buildPlatforms: ${{ parameters.buildPlatforms }}
|
|
buildConfigurations: ${{ parameters.buildConfigurations }}
|
|
versionNumber: ${{ parameters.versionNumber }}
|
|
publishArtifacts: false # 1ES PT handles publication for us.
|
|
official: true
|
|
codeSign: true
|
|
runTests: false
|
|
signingIdentity:
|
|
serviceName: $(SigningServiceName)
|
|
appId: $(SigningAppId)
|
|
tenantId: $(SigningTenantId)
|
|
akvName: $(SigningAKVName)
|
|
authCertName: $(SigningAuthCertName)
|
|
signCertName: $(SigningSignCertName)
|
|
useManagedIdentity: $(SigningUseManagedIdentity)
|
|
clientId: $(SigningOriginalClientId)
|
|
# Have msbuild use the release nuget config profile
|
|
additionalBuildOptions: /p:RestoreConfigFile="$(Build.SourcesDirectory)\.pipelines\release-nuget.config" /p:EnableCmdPalAOT=${{ parameters.enableAOT }} /p:InstallerSuffix=${{ parameters.installerSuffix }}
|
|
installerSuffix: ${{ parameters.installerSuffix }}
|
|
beforeBuildSteps:
|
|
# Sets versions for all PowerToy created DLLs
|
|
- pwsh: |-
|
|
.pipelines/versionSetting.ps1 -versionNumber '${{ parameters.versionNumber }}' -DevEnvironment ''
|
|
displayName: Prepare versioning
|
|
|
|
# Prepare the localizations and telemetry config before the release build
|
|
- template: .pipelines/v2/templates/steps-fetch-and-prepare-localizations.yml@self
|
|
|
|
- pwsh: |-
|
|
$ErrorActionPreference = 'Stop'
|
|
$PSNativeCommandUseErrorActionPreference = $true
|
|
& nuget.exe restore -configFile .pipelines/release-nuget.config -PackagesDirectory . .pipelines/packages.config
|
|
Move-Item -Force -Verbose "Microsoft.PowerToys.Telemetry.*\build\include\TraceLoggingDefines.h" "src\common\Telemetry\TraceLoggingDefines.h"
|
|
Move-Item -Force -Verbose "Microsoft.PowerToys.Telemetry.*\build\include\TelemetryBase.cs" "src\common\Telemetry\TelemetryBase.cs"
|
|
displayName: Emplace telemetry files
|
|
|
|
- stage: Build_SDK
|
|
displayName: Build SDK
|
|
dependsOn: []
|
|
jobs:
|
|
- template: .pipelines/v2/templates/job-build-sdk.yml@self
|
|
parameters:
|
|
pool:
|
|
name: SHINE-INT-L
|
|
image: SHINE-VS17-Latest
|
|
os: windows
|
|
official: true
|
|
codeSign: true
|
|
signingIdentity:
|
|
serviceName: $(SigningServiceName)
|
|
appId: $(SigningAppId)
|
|
tenantId: $(SigningTenantId)
|
|
akvName: $(SigningAKVName)
|
|
authCertName: $(SigningAuthCertName)
|
|
signCertName: $(SigningSignCertName)
|
|
useManagedIdentity: $(SigningUseManagedIdentity)
|
|
clientId: $(SigningOriginalClientId)
|
|
|
|
- stage: Publish
|
|
displayName: Publish
|
|
dependsOn: [Build]
|
|
jobs:
|
|
- template: .pipelines/v2/templates/job-publish-symbols-using-symbolrequestprod-api.yml@self
|
|
parameters:
|
|
versionNumber: ${{ parameters.versionNumber }}
|
|
includePublicSymbolServer: ${{ parameters.publishSymbolsToPublic }}
|
|
${{ if ne(parameters.publishSymbolsToPublic, true) }}:
|
|
symbolExpiryTime: 10 # For private builds, expire symbols within 10 days. The default is 100 years.
|
|
subscription: $(SymbolPublishingServiceConnection)
|
|
symbolProject: $(SymbolPublishingProject)
|