mirror of
https://github.com/microsoft/PowerToys.git
synced 2025-12-28 16:07:02 +01:00
I am changing the default build pool image from Windows Server 2019 to Server 2022, as the 2019 images are deprecated and their use will become a permanent error soon. However, I cannot do that while PowerToys contains build image overrides. These overrides prevent it from choosing the Server 2022 images. As a drive-by, I fixed the following issues: - `NUGET_PACKAGES` was being read from the ambient environment. It was used in the package cache _and_ in the WIX projects directly (!). To make the build more predictable, we now set it during build time. - We _still_ had build step conditions that resulted in extra work being done during build failure. - The release builds now produce numbered failure log artifacts just like the CI builds do. - I have adjusted the default disk configuration to give enough space to `C:\`, so we no longer need the work directory override or custom data disk. The screenshot below is from a test run where I overrode the pool image to be `SHINE-VS17-Latest-2022`. We do not want to do that in the final configuration, so I had to revert that change. <img width="1205" height="452" alt="image" src="https://github.com/user-attachments/assets/fcf03e8c-d2a1-47af-9240-64c183c43644" />
151 lines
6.0 KiB
YAML
151 lines
6.0 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: 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: $(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
|
|
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
|
|
demands:
|
|
# Our INT agents have a large disk mounted at P:\
|
|
- ${{ if eq(parameters.useVSPreview, true) }}:
|
|
- ImageOverride -equals SHINE-VS17-Preview
|
|
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=true
|
|
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
|
|
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)
|