mirror of
https://github.com/microsoft/PowerToys.git
synced 2025-12-15 11:17:53 +01:00
[Build] Switch the release pipeline to use the 1ES governed template (#29014)
This commit is contained in:
3
.github/actions/spell-check/allow/allow.txt
vendored
3
.github/actions/spell-check/allow/allow.txt
vendored
@@ -1,8 +1,11 @@
|
|||||||
|
cloudai
|
||||||
bkmeneguello
|
bkmeneguello
|
||||||
FWest
|
FWest
|
||||||
|
gdnbaselines
|
||||||
github
|
github
|
||||||
https
|
https
|
||||||
obairka
|
obairka
|
||||||
|
sdl
|
||||||
ssh
|
ssh
|
||||||
ubuntu
|
ubuntu
|
||||||
unuing
|
unuing
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ steps:
|
|||||||
clean: true
|
clean: true
|
||||||
maximumCpuCount: true
|
maximumCpuCount: true
|
||||||
|
|
||||||
- task: SFP.build-tasks.custom-build-task-1.EsrpCodeSigning@1
|
- task: SFP.build-tasks.custom-build-task-1.EsrpCodeSigning@3
|
||||||
displayName: Sign PowerToysSetupCustomActions DLL
|
displayName: Sign PowerToysSetupCustomActions DLL
|
||||||
inputs:
|
inputs:
|
||||||
ConnectedServiceName: "Terminal/Console/WinAppDriver Team Code Signing Connection"
|
ConnectedServiceName: "Terminal/Console/WinAppDriver Team Code Signing Connection"
|
||||||
@@ -74,7 +74,7 @@ steps:
|
|||||||
scriptName: .pipelines/versionAndSignCheck.ps1
|
scriptName: .pipelines/versionAndSignCheck.ps1
|
||||||
arguments: -targetDir '$(build.sourcesdirectory)\extractedMsi\Binary'
|
arguments: -targetDir '$(build.sourcesdirectory)\extractedMsi\Binary'
|
||||||
|
|
||||||
- task: SFP.build-tasks.custom-build-task-1.EsrpCodeSigning@1
|
- task: SFP.build-tasks.custom-build-task-1.EsrpCodeSigning@3
|
||||||
displayName: Sign MSI
|
displayName: Sign MSI
|
||||||
inputs:
|
inputs:
|
||||||
ConnectedServiceName: "Terminal/Console/WinAppDriver Team Code Signing Connection"
|
ConnectedServiceName: "Terminal/Console/WinAppDriver Team Code Signing Connection"
|
||||||
@@ -101,7 +101,7 @@ steps:
|
|||||||
inputs:
|
inputs:
|
||||||
script: '"C:\Program Files (x86)\WiX Toolset v3.14\bin\insignia.exe" -ib installer\PowerToysSetup\$(BuildPlatform)\$(BuildConfiguration)\${{parameters.buildSubDir}}\${{parameters.installerPrefix}}-${{ parameters.versionNumber }}-$(BuildPlatform).exe -o installer\engine.exe'
|
script: '"C:\Program Files (x86)\WiX Toolset v3.14\bin\insignia.exe" -ib installer\PowerToysSetup\$(BuildPlatform)\$(BuildConfiguration)\${{parameters.buildSubDir}}\${{parameters.installerPrefix}}-${{ parameters.versionNumber }}-$(BuildPlatform).exe -o installer\engine.exe'
|
||||||
|
|
||||||
- task: SFP.build-tasks.custom-build-task-1.EsrpCodeSigning@1
|
- task: SFP.build-tasks.custom-build-task-1.EsrpCodeSigning@3
|
||||||
displayName: "ESRP CodeSigning (Engine)"
|
displayName: "ESRP CodeSigning (Engine)"
|
||||||
inputs:
|
inputs:
|
||||||
ConnectedServiceName: "Terminal/Console/WinAppDriver Team Code Signing Connection"
|
ConnectedServiceName: "Terminal/Console/WinAppDriver Team Code Signing Connection"
|
||||||
@@ -137,7 +137,7 @@ steps:
|
|||||||
inputs:
|
inputs:
|
||||||
script: '"C:\Program Files (x86)\WiX Toolset v3.14\bin\insignia.exe" -ab installer\engine.exe installer\PowerToysSetup\$(BuildPlatform)\$(BuildConfiguration)\${{parameters.buildSubDir}}\${{parameters.installerPrefix}}-${{ parameters.versionNumber }}-$(BuildPlatform).exe -o installer\PowerToysSetup\$(BuildPlatform)\$(BuildConfiguration)\${{parameters.buildSubDir}}\${{parameters.installerPrefix}}-${{ parameters.versionNumber }}-$(BuildPlatform).exe'
|
script: '"C:\Program Files (x86)\WiX Toolset v3.14\bin\insignia.exe" -ab installer\engine.exe installer\PowerToysSetup\$(BuildPlatform)\$(BuildConfiguration)\${{parameters.buildSubDir}}\${{parameters.installerPrefix}}-${{ parameters.versionNumber }}-$(BuildPlatform).exe -o installer\PowerToysSetup\$(BuildPlatform)\$(BuildConfiguration)\${{parameters.buildSubDir}}\${{parameters.installerPrefix}}-${{ parameters.versionNumber }}-$(BuildPlatform).exe'
|
||||||
|
|
||||||
- task: SFP.build-tasks.custom-build-task-1.EsrpCodeSigning@1
|
- task: SFP.build-tasks.custom-build-task-1.EsrpCodeSigning@3
|
||||||
displayName: Sign Bootstrapper
|
displayName: Sign Bootstrapper
|
||||||
inputs:
|
inputs:
|
||||||
ConnectedServiceName: "Terminal/Console/WinAppDriver Team Code Signing Connection"
|
ConnectedServiceName: "Terminal/Console/WinAppDriver Team Code Signing Connection"
|
||||||
|
|||||||
@@ -1,10 +1,13 @@
|
|||||||
# This build should never run as CI or against a pull request.
|
# This build should never run as CI or against a pull request.
|
||||||
|
name: $(BuildDefinitionName)_$(date:yyMM).$(date:dd)$(rev:rrr)
|
||||||
trigger: none
|
trigger: none
|
||||||
pr: none
|
|
||||||
|
|
||||||
pool:
|
resources:
|
||||||
name: SHINE-INT-L
|
repositories:
|
||||||
demands: ImageOverride -equals SHINE-VS17-Latest
|
- repository: 1ESPipelineTemplates
|
||||||
|
type: git
|
||||||
|
name: 1ESPipelineTemplates/1ESPipelineTemplates
|
||||||
|
ref: refs/tags/release
|
||||||
|
|
||||||
parameters:
|
parameters:
|
||||||
- name: buildConfigurations
|
- name: buildConfigurations
|
||||||
@@ -20,429 +23,423 @@ parameters:
|
|||||||
type: string
|
type: string
|
||||||
default: '0.0.1'
|
default: '0.0.1'
|
||||||
|
|
||||||
variables:
|
extends:
|
||||||
IsPipeline: 1 # The installer uses this to detect whether it should pick up localizations
|
template: v1/1ES.Official.PipelineTemplate.yml@1ESPipelineTemplates
|
||||||
SkipCppCodeAnalysis: 1 # Skip the code analysis to speed up release CI. It runs on PR CI, anyway
|
parameters:
|
||||||
IsExperimentationLive: 1 # The build and installer use this to turn on experimentation
|
customBuildTags:
|
||||||
|
- 1ES.PT.ViaStartRight
|
||||||
|
pool:
|
||||||
|
name: SHINE-INT-S
|
||||||
|
image: SHINE-VS17-Latest
|
||||||
|
os: windows
|
||||||
|
|
||||||
name: $(BuildDefinitionName)_$(date:yyMM).$(date:dd)$(rev:rrr)
|
stages:
|
||||||
resources:
|
- stage: build
|
||||||
repositories:
|
displayName: Build (Complete)
|
||||||
- repository: self
|
pool:
|
||||||
type: git
|
name: SHINE-INT-L
|
||||||
ref: main
|
image: SHINE-VS17-Latest
|
||||||
jobs:
|
os: windows
|
||||||
- job: Build
|
jobs:
|
||||||
strategy:
|
- job: Build
|
||||||
matrix:
|
strategy:
|
||||||
${{ each config in parameters.buildConfigurations }}:
|
matrix:
|
||||||
${{ each platform in parameters.buildPlatforms }}:
|
${{ each config in parameters.buildConfigurations }}:
|
||||||
${{ config }}_${{ platform }}:
|
${{ each platform in parameters.buildPlatforms }}:
|
||||||
BuildConfiguration: ${{ config }}
|
${{ config }}_${{ platform }}:
|
||||||
BuildPlatform: ${{ platform }}
|
BuildConfiguration: ${{ config }}
|
||||||
NUGET_RESTORE_MSBUILD_ARGS: /p:Platform=${{ platform }} # Required for nuget to work due to self contained
|
BuildPlatform: ${{ platform }}
|
||||||
NODE_OPTIONS: --max_old_space_size=16384
|
templateContext:
|
||||||
displayName: Build
|
outputs:
|
||||||
timeoutInMinutes: 120 # Some of the loc stuff adds quite a bit of time.
|
- output: pipelineArtifact
|
||||||
cancelTimeoutInMinutes: 1
|
artifactName: setup-$(BuildPlatform)
|
||||||
steps:
|
targetPath: $(Build.ArtifactStagingDirectory)
|
||||||
- checkout: self
|
sdl:
|
||||||
clean: true
|
baseline:
|
||||||
submodules: true
|
baselineFile: $(Build.SourcesDirectory)\.pipelines\sdl.gdnbaselines
|
||||||
persistCredentials: True
|
displayName: Build
|
||||||
|
timeoutInMinutes: 240 # Some of the 1ES Pipeline stuff and Loc take a very long time
|
||||||
|
cancelTimeoutInMinutes: 1
|
||||||
|
variables:
|
||||||
|
NUGET_RESTORE_MSBUILD_ARGS: /p:Platform=$(BuildPlatform) # Required for nuget to work due to self contained
|
||||||
|
NODE_OPTIONS: --max_old_space_size=16384
|
||||||
|
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
|
||||||
|
steps:
|
||||||
|
- checkout: self
|
||||||
|
clean: true
|
||||||
|
submodules: true
|
||||||
|
persistCredentials: True
|
||||||
|
|
||||||
# Sets versions for all PowerToy created DLLs
|
# Sets versions for all PowerToy created DLLs
|
||||||
- task: PowerShell@1
|
- task: PowerShell@1
|
||||||
displayName: Set Versions.Prop
|
displayName: Set Versions.Prop
|
||||||
inputs:
|
inputs:
|
||||||
scriptName: .pipelines/versionSetting.ps1
|
scriptName: .pipelines/versionSetting.ps1
|
||||||
arguments: -versionNumber '${{ parameters.versionNumber }}' -DevEnvironment ''
|
arguments: -versionNumber '${{ parameters.versionNumber }}' -DevEnvironment ''
|
||||||
|
|
||||||
# Guardian tool needs 'Microsoft.NETCore.App', version '2.1.0' (x64)
|
# ESRP needs 'Microsoft.NETCore.App', version '6.0.0' (x64)
|
||||||
- task: UseDotNet@2
|
- task: UseDotNet@2
|
||||||
displayName: 'Use .NET Core 2.1 SDK'
|
displayName: 'Use .NET 6 SDK'
|
||||||
inputs:
|
inputs:
|
||||||
packageType: sdk
|
packageType: sdk
|
||||||
version: '2.1.x'
|
version: '6.x'
|
||||||
|
|
||||||
- task: UseDotNet@2
|
- task: UseDotNet@2
|
||||||
displayName: 'Use .NET 7 SDK'
|
displayName: 'Use .NET 7 SDK'
|
||||||
inputs:
|
inputs:
|
||||||
packageType: sdk
|
packageType: sdk
|
||||||
version: '7.x'
|
version: '7.x'
|
||||||
|
|
||||||
- task: NuGetAuthenticate@1
|
- task: NuGetAuthenticate@1
|
||||||
|
|
||||||
- task: NuGetToolInstaller@1
|
- task: NuGetToolInstaller@1
|
||||||
displayName: Use NuGet Installer latest
|
displayName: Use NuGet Installer latest
|
||||||
|
|
||||||
# this will restore the following nugets:
|
# this will restore the following nugets:
|
||||||
# - main solution
|
# - main solution
|
||||||
# - Bug report tool
|
# - Bug report tool
|
||||||
# - Webcam report tool
|
# - Webcam report tool
|
||||||
# - Installer
|
# - Installer
|
||||||
# - Bootstrapper Installer
|
# - Bootstrapper Installer
|
||||||
- task: PowerShell@2
|
- task: PowerShell@2
|
||||||
displayName: Download and install WiX 3.14 development build
|
displayName: Download and install WiX 3.14 development build
|
||||||
inputs:
|
inputs:
|
||||||
targetType: filePath
|
targetType: filePath
|
||||||
filePath: '$(build.sourcesdirectory)\.pipelines\installWiX.ps1'
|
filePath: '$(build.sourcesdirectory)\.pipelines\installWiX.ps1'
|
||||||
|
|
||||||
- task: MicrosoftTDBuild.tdbuild-task.tdbuild-task.TouchdownBuildTask@1
|
- task: MicrosoftTDBuild.tdbuild-task.tdbuild-task.TouchdownBuildTask@1
|
||||||
displayName: 'Download Localization Files -- PowerToys 37400'
|
displayName: 'Download Localization Files -- PowerToys 37400'
|
||||||
inputs:
|
inputs:
|
||||||
teamId: 37400
|
teamId: 37400
|
||||||
authId: '$(TouchdownApplicationID)'
|
authId: '$(TouchdownApplicationID)'
|
||||||
authKey: '$(TouchdownApplicationKey)'
|
authKey: '$(TouchdownApplicationKey)'
|
||||||
resourceFilePath: |
|
resourceFilePath: |
|
||||||
**\Resources.resx
|
**\Resources.resx
|
||||||
**\Resource.resx
|
**\Resource.resx
|
||||||
**\Resources.resw
|
**\Resources.resw
|
||||||
appendRelativeDir: true
|
appendRelativeDir: true
|
||||||
localizationTarget: false
|
localizationTarget: false
|
||||||
# pseudoSetting: Included
|
# pseudoSetting: Included
|
||||||
|
|
||||||
- task: PowerShell@2
|
- task: PowerShell@2
|
||||||
displayName: Move Loc files into correct locations
|
displayName: Move Loc files into correct locations
|
||||||
inputs:
|
inputs:
|
||||||
targetType: inline
|
targetType: inline
|
||||||
script: >-
|
script: >-
|
||||||
$VerbosePreference = "Continue"
|
$VerbosePreference = "Continue"
|
||||||
|
|
||||||
./tools/build/move-and-rename-resx.ps1
|
./tools/build/move-and-rename-resx.ps1
|
||||||
|
|
||||||
./tools/build/move-uwp-resw.ps1
|
./tools/build/move-uwp-resw.ps1
|
||||||
pwsh: true
|
pwsh: true
|
||||||
|
|
||||||
- task: CmdLine@2
|
- task: CmdLine@2
|
||||||
displayName: Moving telem files
|
displayName: Moving telem files
|
||||||
inputs:
|
inputs:
|
||||||
script: |
|
script: |
|
||||||
call nuget.exe restore -configFile .pipelines/release-nuget.config -PackagesDirectory . .pipelines/packages.config || exit /b 1
|
call nuget.exe restore -configFile .pipelines/release-nuget.config -PackagesDirectory . .pipelines/packages.config || exit /b 1
|
||||||
move /Y "Microsoft.PowerToys.Telemetry.2.0.0\build\include\TraceLoggingDefines.h" "src\common\Telemetry\TraceLoggingDefines.h" || exit /b 1
|
move /Y "Microsoft.PowerToys.Telemetry.2.0.0\build\include\TraceLoggingDefines.h" "src\common\Telemetry\TraceLoggingDefines.h" || exit /b 1
|
||||||
move /Y "Microsoft.PowerToys.Telemetry.2.0.0\build\include\TelemetryBase.cs" "src\common\Telemetry\TelemetryBase.cs" || exit /b 1
|
move /Y "Microsoft.PowerToys.Telemetry.2.0.0\build\include\TelemetryBase.cs" "src\common\Telemetry\TelemetryBase.cs" || exit /b 1
|
||||||
|
|
||||||
## ALL BUT INSTALLER BUILDING
|
## ALL BUT INSTALLER BUILDING
|
||||||
- task: VSBuild@1
|
- task: VSBuild@1
|
||||||
displayName: Build PowerToys main project
|
displayName: Build PowerToys main project
|
||||||
inputs:
|
inputs:
|
||||||
solution: '**\PowerToys.sln'
|
solution: '**\PowerToys.sln'
|
||||||
vsVersion: 17.0
|
vsVersion: 17.0
|
||||||
msbuildArgs: -restore /p:RestorePackagesConfig=true /p:RestoreConfigFile="$(Build.SourcesDirectory)\.pipelines\release-nuget.config" /p:CIBuild=true /bl:$(Build.SourcesDirectory)\msbuild.binlog
|
msbuildArgs: -restore /p:RestorePackagesConfig=true /p:RestoreConfigFile="$(Build.SourcesDirectory)\.pipelines\release-nuget.config" /p:CIBuild=true /bl:$(Build.SourcesDirectory)\msbuild.binlog
|
||||||
platform: $(BuildPlatform)
|
platform: $(BuildPlatform)
|
||||||
configuration: $(BuildConfiguration)
|
configuration: $(BuildConfiguration)
|
||||||
clean: true
|
clean: true
|
||||||
maximumCpuCount: true
|
maximumCpuCount: true
|
||||||
|
|
||||||
- task: VSBuild@1
|
- task: VSBuild@1
|
||||||
displayName: Build BugReportTool
|
displayName: Build BugReportTool
|
||||||
inputs:
|
inputs:
|
||||||
solution: '**/tools/BugReportTool/BugReportTool.sln'
|
solution: '**/tools/BugReportTool/BugReportTool.sln'
|
||||||
vsVersion: 17.0
|
vsVersion: 17.0
|
||||||
msbuildArgs: -restore /p:RestorePackagesConfig=true /p:RestoreConfigFile="$(Build.SourcesDirectory)\.pipelines\release-nuget.config" /p:CIBuild=true /bl:$(Build.SourcesDirectory)\msbuild.binlog
|
msbuildArgs: -restore /p:RestorePackagesConfig=true /p:RestoreConfigFile="$(Build.SourcesDirectory)\.pipelines\release-nuget.config" /p:CIBuild=true /bl:$(Build.SourcesDirectory)\msbuild.binlog
|
||||||
platform: $(BuildPlatform)
|
platform: $(BuildPlatform)
|
||||||
configuration: $(BuildConfiguration)
|
configuration: $(BuildConfiguration)
|
||||||
clean: true
|
clean: true
|
||||||
maximumCpuCount: true
|
maximumCpuCount: true
|
||||||
|
|
||||||
- task: VSBuild@1
|
- task: VSBuild@1
|
||||||
displayName: Build WebcamReportTool
|
displayName: Build WebcamReportTool
|
||||||
inputs:
|
inputs:
|
||||||
solution: '**/tools/WebcamReportTool/WebcamReportTool.sln'
|
solution: '**/tools/WebcamReportTool/WebcamReportTool.sln'
|
||||||
vsVersion: 17.0
|
vsVersion: 17.0
|
||||||
msbuildArgs: -restore /p:RestorePackagesConfig=true /p:RestoreConfigFile="$(Build.SourcesDirectory)\.pipelines\release-nuget.config" /p:CIBuild=true /bl:$(Build.SourcesDirectory)\msbuild.binlog
|
msbuildArgs: -restore /p:RestorePackagesConfig=true /p:RestoreConfigFile="$(Build.SourcesDirectory)\.pipelines\release-nuget.config" /p:CIBuild=true /bl:$(Build.SourcesDirectory)\msbuild.binlog
|
||||||
platform: $(BuildPlatform)
|
platform: $(BuildPlatform)
|
||||||
configuration: $(BuildConfiguration)
|
configuration: $(BuildConfiguration)
|
||||||
clean: true
|
clean: true
|
||||||
maximumCpuCount: true
|
maximumCpuCount: true
|
||||||
|
|
||||||
- task: VSBuild@1
|
- task: VSBuild@1
|
||||||
displayName: Build StylesReportTool
|
displayName: Build StylesReportTool
|
||||||
inputs:
|
inputs:
|
||||||
solution: '**/tools/StylesReportTool/StylesReportTool.sln'
|
solution: '**/tools/StylesReportTool/StylesReportTool.sln'
|
||||||
vsVersion: 17.0
|
vsVersion: 17.0
|
||||||
msbuildArgs: -restore /p:RestorePackagesConfig=true /p:RestoreConfigFile="$(Build.SourcesDirectory)\.pipelines\release-nuget.config" /p:CIBuild=true /bl:$(Build.SourcesDirectory)\msbuild.binlog
|
msbuildArgs: -restore /p:RestorePackagesConfig=true /p:RestoreConfigFile="$(Build.SourcesDirectory)\.pipelines\release-nuget.config" /p:CIBuild=true /bl:$(Build.SourcesDirectory)\msbuild.binlog
|
||||||
platform: $(BuildPlatform)
|
platform: $(BuildPlatform)
|
||||||
configuration: $(BuildConfiguration)
|
configuration: $(BuildConfiguration)
|
||||||
clean: true
|
clean: true
|
||||||
maximumCpuCount: true
|
maximumCpuCount: true
|
||||||
|
|
||||||
- task: VSBuild@1
|
- task: VSBuild@1
|
||||||
displayName: Publish Settings for Packaging
|
displayName: Publish Settings for Packaging
|
||||||
inputs:
|
inputs:
|
||||||
solution: 'src/settings-ui/Settings.UI/PowerToys.Settings.csproj'
|
solution: 'src/settings-ui/Settings.UI/PowerToys.Settings.csproj'
|
||||||
vsVersion: 17.0
|
vsVersion: 17.0
|
||||||
msbuildArgs: >-
|
msbuildArgs: >-
|
||||||
/target:Publish
|
/target:Publish
|
||||||
/p:Configuration=$(BuildConfiguration);Platform=$(BuildPlatform);AppxBundle=Never
|
/p:Configuration=$(BuildConfiguration);Platform=$(BuildPlatform);AppxBundle=Never
|
||||||
/p:VCRTForwarders-IncludeDebugCRT=false
|
/p:VCRTForwarders-IncludeDebugCRT=false
|
||||||
/p:PowerToysRoot=$(Build.SourcesDirectory)
|
/p:PowerToysRoot=$(Build.SourcesDirectory)
|
||||||
/p:PublishProfile=InstallationPublishProfile.pubxml
|
/p:PublishProfile=InstallationPublishProfile.pubxml
|
||||||
platform: $(BuildPlatform)
|
platform: $(BuildPlatform)
|
||||||
configuration: $(BuildConfiguration)
|
configuration: $(BuildConfiguration)
|
||||||
maximumCpuCount: true
|
maximumCpuCount: true
|
||||||
|
|
||||||
- task: VSBuild@1
|
- task: VSBuild@1
|
||||||
displayName: Publish Launcher for Packaging
|
displayName: Publish Launcher for Packaging
|
||||||
inputs:
|
inputs:
|
||||||
solution: 'src/modules/launcher/PowerLauncher/PowerLauncher.csproj'
|
solution: 'src/modules/launcher/PowerLauncher/PowerLauncher.csproj'
|
||||||
vsVersion: 17.0
|
vsVersion: 17.0
|
||||||
# The arguments should be the same as the ones for Settings; make sure they are.
|
# The arguments should be the same as the ones for Settings; make sure they are.
|
||||||
msbuildArgs: >-
|
msbuildArgs: >-
|
||||||
/target:Publish
|
/target:Publish
|
||||||
/p:Configuration=$(BuildConfiguration);Platform=$(BuildPlatform);AppxBundle=Never
|
/p:Configuration=$(BuildConfiguration);Platform=$(BuildPlatform);AppxBundle=Never
|
||||||
/p:VCRTForwarders-IncludeDebugCRT=false
|
/p:VCRTForwarders-IncludeDebugCRT=false
|
||||||
/p:PowerToysRoot=$(Build.SourcesDirectory)
|
/p:PowerToysRoot=$(Build.SourcesDirectory)
|
||||||
/p:PublishProfile=InstallationPublishProfile.pubxml
|
/p:PublishProfile=InstallationPublishProfile.pubxml
|
||||||
platform: $(BuildPlatform)
|
platform: $(BuildPlatform)
|
||||||
configuration: $(BuildConfiguration)
|
configuration: $(BuildConfiguration)
|
||||||
maximumCpuCount: true
|
maximumCpuCount: true
|
||||||
|
|
||||||
- task: VSBuild@1
|
- task: VSBuild@1
|
||||||
displayName: Publish Monaco Preview Handler for Packaging
|
displayName: Publish Monaco Preview Handler for Packaging
|
||||||
inputs:
|
inputs:
|
||||||
solution: 'src/modules/previewpane/MonacoPreviewHandler/MonacoPreviewHandler.csproj'
|
solution: 'src/modules/previewpane/MonacoPreviewHandler/MonacoPreviewHandler.csproj'
|
||||||
vsVersion: 17.0
|
vsVersion: 17.0
|
||||||
# The arguments should be the same as the ones for Settings; make sure they are.
|
# The arguments should be the same as the ones for Settings; make sure they are.
|
||||||
msbuildArgs: >-
|
msbuildArgs: >-
|
||||||
/target:Publish
|
/target:Publish
|
||||||
/p:Configuration=$(BuildConfiguration);Platform=$(BuildPlatform);AppxBundle=Never
|
/p:Configuration=$(BuildConfiguration);Platform=$(BuildPlatform);AppxBundle=Never
|
||||||
/p:VCRTForwarders-IncludeDebugCRT=false
|
/p:VCRTForwarders-IncludeDebugCRT=false
|
||||||
/p:PowerToysRoot=$(Build.SourcesDirectory)
|
/p:PowerToysRoot=$(Build.SourcesDirectory)
|
||||||
/p:PublishProfile=InstallationPublishProfile.pubxml
|
/p:PublishProfile=InstallationPublishProfile.pubxml
|
||||||
platform: $(BuildPlatform)
|
platform: $(BuildPlatform)
|
||||||
configuration: $(BuildConfiguration)
|
configuration: $(BuildConfiguration)
|
||||||
maximumCpuCount: true
|
maximumCpuCount: true
|
||||||
|
|
||||||
- task: VSBuild@1
|
- task: VSBuild@1
|
||||||
displayName: Publish Markdown Preview Handler for Packaging
|
displayName: Publish Markdown Preview Handler for Packaging
|
||||||
inputs:
|
inputs:
|
||||||
solution: 'src/modules/previewpane/MarkdownPreviewHandler/MarkdownPreviewHandler.csproj'
|
solution: 'src/modules/previewpane/MarkdownPreviewHandler/MarkdownPreviewHandler.csproj'
|
||||||
vsVersion: 17.0
|
vsVersion: 17.0
|
||||||
# The arguments should be the same as the ones for Settings; make sure they are.
|
# The arguments should be the same as the ones for Settings; make sure they are.
|
||||||
msbuildArgs: >-
|
msbuildArgs: >-
|
||||||
/target:Publish
|
/target:Publish
|
||||||
/p:Configuration=$(BuildConfiguration);Platform=$(BuildPlatform);AppxBundle=Never
|
/p:Configuration=$(BuildConfiguration);Platform=$(BuildPlatform);AppxBundle=Never
|
||||||
/p:VCRTForwarders-IncludeDebugCRT=false
|
/p:VCRTForwarders-IncludeDebugCRT=false
|
||||||
/p:PowerToysRoot=$(Build.SourcesDirectory)
|
/p:PowerToysRoot=$(Build.SourcesDirectory)
|
||||||
/p:PublishProfile=InstallationPublishProfile.pubxml
|
/p:PublishProfile=InstallationPublishProfile.pubxml
|
||||||
platform: $(BuildPlatform)
|
platform: $(BuildPlatform)
|
||||||
configuration: $(BuildConfiguration)
|
configuration: $(BuildConfiguration)
|
||||||
maximumCpuCount: true
|
maximumCpuCount: true
|
||||||
|
|
||||||
- task: VSBuild@1
|
- task: VSBuild@1
|
||||||
displayName: Publish Svg Preview Handler for Packaging
|
displayName: Publish Svg Preview Handler for Packaging
|
||||||
inputs:
|
inputs:
|
||||||
solution: 'src/modules/previewpane/SvgPreviewHandler/SvgPreviewHandler.csproj'
|
solution: 'src/modules/previewpane/SvgPreviewHandler/SvgPreviewHandler.csproj'
|
||||||
vsVersion: 17.0
|
vsVersion: 17.0
|
||||||
# The arguments should be the same as the ones for Settings; make sure they are.
|
# The arguments should be the same as the ones for Settings; make sure they are.
|
||||||
msbuildArgs: >-
|
msbuildArgs: >-
|
||||||
/target:Publish
|
/target:Publish
|
||||||
/p:Configuration=$(BuildConfiguration);Platform=$(BuildPlatform);AppxBundle=Never
|
/p:Configuration=$(BuildConfiguration);Platform=$(BuildPlatform);AppxBundle=Never
|
||||||
/p:VCRTForwarders-IncludeDebugCRT=false
|
/p:VCRTForwarders-IncludeDebugCRT=false
|
||||||
/p:PowerToysRoot=$(Build.SourcesDirectory)
|
/p:PowerToysRoot=$(Build.SourcesDirectory)
|
||||||
/p:PublishProfile=InstallationPublishProfile.pubxml
|
/p:PublishProfile=InstallationPublishProfile.pubxml
|
||||||
platform: $(BuildPlatform)
|
platform: $(BuildPlatform)
|
||||||
configuration: $(BuildConfiguration)
|
configuration: $(BuildConfiguration)
|
||||||
maximumCpuCount: true
|
maximumCpuCount: true
|
||||||
|
|
||||||
- task: VSBuild@1
|
- task: VSBuild@1
|
||||||
displayName: Publish Svg Thumbnail Provider for Packaging
|
displayName: Publish Svg Thumbnail Provider for Packaging
|
||||||
inputs:
|
inputs:
|
||||||
solution: 'src/modules/previewpane/SvgThumbnailProvider/SvgThumbnailProvider.csproj'
|
solution: 'src/modules/previewpane/SvgThumbnailProvider/SvgThumbnailProvider.csproj'
|
||||||
vsVersion: 17.0
|
vsVersion: 17.0
|
||||||
# The arguments should be the same as the ones for Settings; make sure they are.
|
# The arguments should be the same as the ones for Settings; make sure they are.
|
||||||
msbuildArgs: >-
|
msbuildArgs: >-
|
||||||
/target:Publish
|
/target:Publish
|
||||||
/p:Configuration=$(BuildConfiguration);Platform=$(BuildPlatform);AppxBundle=Never
|
/p:Configuration=$(BuildConfiguration);Platform=$(BuildPlatform);AppxBundle=Never
|
||||||
/p:VCRTForwarders-IncludeDebugCRT=false
|
/p:VCRTForwarders-IncludeDebugCRT=false
|
||||||
/p:PowerToysRoot=$(Build.SourcesDirectory)
|
/p:PowerToysRoot=$(Build.SourcesDirectory)
|
||||||
/p:PublishProfile=InstallationPublishProfile.pubxml
|
/p:PublishProfile=InstallationPublishProfile.pubxml
|
||||||
platform: $(BuildPlatform)
|
platform: $(BuildPlatform)
|
||||||
configuration: $(BuildConfiguration)
|
configuration: $(BuildConfiguration)
|
||||||
maximumCpuCount: true
|
maximumCpuCount: true
|
||||||
|
|
||||||
- task: VSBuild@1
|
- task: VSBuild@1
|
||||||
displayName: Publish File Locksmith UI for Packaging
|
displayName: Publish File Locksmith UI for Packaging
|
||||||
inputs:
|
inputs:
|
||||||
solution: 'src/modules/FileLocksmith/FileLocksmithUI/FileLocksmithUI.csproj'
|
solution: 'src/modules/FileLocksmith/FileLocksmithUI/FileLocksmithUI.csproj'
|
||||||
vsVersion: 17.0
|
vsVersion: 17.0
|
||||||
# The arguments should be the same as the ones for Settings; make sure they are.
|
# The arguments should be the same as the ones for Settings; make sure they are.
|
||||||
msbuildArgs: >-
|
msbuildArgs: >-
|
||||||
/target:Publish
|
/target:Publish
|
||||||
/p:Configuration=$(BuildConfiguration);Platform=$(BuildPlatform);AppxBundle=Never
|
/p:Configuration=$(BuildConfiguration);Platform=$(BuildPlatform);AppxBundle=Never
|
||||||
/p:VCRTForwarders-IncludeDebugCRT=false
|
/p:VCRTForwarders-IncludeDebugCRT=false
|
||||||
/p:PowerToysRoot=$(Build.SourcesDirectory)
|
/p:PowerToysRoot=$(Build.SourcesDirectory)
|
||||||
/p:PublishProfile=InstallationPublishProfile.pubxml
|
/p:PublishProfile=InstallationPublishProfile.pubxml
|
||||||
platform: $(BuildPlatform)
|
platform: $(BuildPlatform)
|
||||||
configuration: $(BuildConfiguration)
|
configuration: $(BuildConfiguration)
|
||||||
maximumCpuCount: true
|
maximumCpuCount: true
|
||||||
|
|
||||||
# Check if deps.json files don't reference different dll versions.
|
# Check if deps.json files don't reference different dll versions.
|
||||||
- task: PowerShell@2
|
- task: PowerShell@2
|
||||||
displayName: Audit deps.json files for all applications
|
displayName: Audit deps.json files for all applications
|
||||||
inputs:
|
inputs:
|
||||||
filePath: '.pipelines/verifyDepsJsonLibraryVersions.ps1'
|
filePath: '.pipelines/verifyDepsJsonLibraryVersions.ps1'
|
||||||
arguments: -targetDir '$(build.sourcesdirectory)\$(BuildPlatform)\$(BuildConfiguration)'
|
arguments: -targetDir '$(build.sourcesdirectory)\$(BuildPlatform)\$(BuildConfiguration)'
|
||||||
pwsh: true
|
pwsh: true
|
||||||
|
|
||||||
# Check if asset files on the main application paths are playing nice and avoiding basic conflicts.
|
# Check if asset files on the main application paths are playing nice and avoiding basic conflicts.
|
||||||
- task: PowerShell@2
|
- task: PowerShell@2
|
||||||
displayName: Audit base applications path asset conflicts
|
displayName: Audit base applications path asset conflicts
|
||||||
inputs:
|
inputs:
|
||||||
filePath: '.pipelines/verifyPossibleAssetConflicts.ps1'
|
filePath: '.pipelines/verifyPossibleAssetConflicts.ps1'
|
||||||
arguments: -targetDir '$(build.sourcesdirectory)\$(BuildPlatform)\$(BuildConfiguration)'
|
arguments: -targetDir '$(build.sourcesdirectory)\$(BuildPlatform)\$(BuildConfiguration)'
|
||||||
pwsh: true
|
pwsh: true
|
||||||
|
|
||||||
- task: PowerShell@2
|
- task: PowerShell@2
|
||||||
displayName: Audit WinAppSDK applications path asset conflicts
|
displayName: Audit WinAppSDK applications path asset conflicts
|
||||||
inputs:
|
inputs:
|
||||||
filePath: '.pipelines/verifyPossibleAssetConflicts.ps1'
|
filePath: '.pipelines/verifyPossibleAssetConflicts.ps1'
|
||||||
arguments: -targetDir '$(build.sourcesdirectory)\$(BuildPlatform)\$(BuildConfiguration)\WinUI3Apps'
|
arguments: -targetDir '$(build.sourcesdirectory)\$(BuildPlatform)\$(BuildConfiguration)\WinUI3Apps'
|
||||||
pwsh: true
|
pwsh: true
|
||||||
|
|
||||||
#### MAIN SIGNING AREA
|
#### MAIN SIGNING AREA
|
||||||
# reference https://dev.azure.com/microsoft/Dart/_git/AppDriver?path=/ESRPSigning.json&version=GBarm64-netcore&_a=contents for winappdriver
|
# reference https://dev.azure.com/microsoft/Dart/_git/AppDriver?path=/ESRPSigning.json&version=GBarm64-netcore&_a=contents for winappdriver
|
||||||
# https://dev.azure.com/microsoft/Dart/_git/AppDriver?path=/CIPolicy.xml&version=GBarm64-netcore&_a=contents
|
# https://dev.azure.com/microsoft/Dart/_git/AppDriver?path=/CIPolicy.xml&version=GBarm64-netcore&_a=contents
|
||||||
|
|
||||||
- task: SFP.build-tasks.custom-build-task-1.EsrpCodeSigning@1
|
- task: SFP.build-tasks.custom-build-task-1.EsrpCodeSigning@3
|
||||||
displayName: Sign Core PT
|
displayName: Sign Core PT
|
||||||
inputs:
|
inputs:
|
||||||
ConnectedServiceName: 'Terminal/Console/WinAppDriver Team Code Signing Connection'
|
ConnectedServiceName: 'Terminal/Console/WinAppDriver Team Code Signing Connection'
|
||||||
FolderPath: '$(BuildPlatform)/$(BuildConfiguration)' # Video conf uses x86 and x64.
|
FolderPath: '$(BuildPlatform)/$(BuildConfiguration)' # Video conf uses x86 and x64.
|
||||||
signType: batchSigning
|
signType: batchSigning
|
||||||
batchSignPolicyFile: '$(build.sourcesdirectory)\.pipelines\ESRPSigning_core.json'
|
batchSignPolicyFile: '$(build.sourcesdirectory)\.pipelines\ESRPSigning_core.json'
|
||||||
ciPolicyFile: '$(build.sourcesdirectory)\.pipelines\CIPolicy.xml'
|
ciPolicyFile: '$(build.sourcesdirectory)\.pipelines\CIPolicy.xml'
|
||||||
|
|
||||||
- task: SFP.build-tasks.custom-build-task-1.EsrpCodeSigning@1
|
- task: SFP.build-tasks.custom-build-task-1.EsrpCodeSigning@3
|
||||||
displayName: Sign x86 directshow VCM
|
displayName: Sign x86 directshow VCM
|
||||||
inputs:
|
inputs:
|
||||||
ConnectedServiceName: 'Terminal/Console/WinAppDriver Team Code Signing Connection'
|
ConnectedServiceName: 'Terminal/Console/WinAppDriver Team Code Signing Connection'
|
||||||
FolderPath: 'x86/$(BuildConfiguration)' # Video conf uses x86 and x64.
|
FolderPath: 'x86/$(BuildConfiguration)' # Video conf uses x86 and x64.
|
||||||
signType: batchSigning
|
signType: batchSigning
|
||||||
batchSignPolicyFile: '$(build.sourcesdirectory)\.pipelines\ESRPSigning_vcm.json'
|
batchSignPolicyFile: '$(build.sourcesdirectory)\.pipelines\ESRPSigning_vcm.json'
|
||||||
ciPolicyFile: '$(build.sourcesdirectory)\.pipelines\CIPolicy.xml'
|
ciPolicyFile: '$(build.sourcesdirectory)\.pipelines\CIPolicy.xml'
|
||||||
#### END SIGNING
|
#### END SIGNING
|
||||||
## END MAIN
|
## END MAIN
|
||||||
|
|
||||||
- task: PublishBuildArtifacts@1
|
- pwsh: |-
|
||||||
displayName: 'Publish Artifact: binlog'
|
Move-Item msbuild.binlog "$(Build.ArtifactStagingDirectory)/"
|
||||||
condition: failed()
|
displayName: Stage binlog into artifact directory
|
||||||
continueOnError: True
|
condition: always()
|
||||||
inputs:
|
|
||||||
PathtoPublish: $(Build.SourcesDirectory)\msbuild.binlog
|
|
||||||
ArtifactName: binlog-$(BuildPlatform)
|
|
||||||
|
|
||||||
- task: ComponentGovernanceComponentDetection@0
|
- task: ComponentGovernanceComponentDetection@0
|
||||||
displayName: Component Detection
|
displayName: Component Detection
|
||||||
|
|
||||||
- task: CopyFiles@2
|
- task: CopyFiles@2
|
||||||
displayName: Copying files for symbols
|
displayName: Copying files for symbols
|
||||||
inputs:
|
inputs:
|
||||||
contents: >-
|
contents: >-
|
||||||
**/*.pdb
|
**/*.pdb
|
||||||
flattenFolders: True
|
flattenFolders: True
|
||||||
targetFolder: $(Build.ArtifactStagingDirectory)/Symbols-$(BuildPlatform)/
|
targetFolder: $(Build.ArtifactStagingDirectory)/Symbols-$(BuildPlatform)/
|
||||||
|
|
||||||
- task: PowerShell@2
|
- task: PowerShell@2
|
||||||
displayName: 'Remove unneeded files from ArtifactStagingDirectory'
|
displayName: 'Remove unneeded files from ArtifactStagingDirectory'
|
||||||
inputs:
|
inputs:
|
||||||
targetType: 'inline'
|
targetType: 'inline'
|
||||||
script: |
|
script: |
|
||||||
cd $(Build.ArtifactStagingDirectory)/Symbols-$(BuildPlatform)/
|
cd $(Build.ArtifactStagingDirectory)/Symbols-$(BuildPlatform)/
|
||||||
Remove-Item vc143.pdb
|
Remove-Item vc143.pdb
|
||||||
Remove-Item *test*
|
Remove-Item *test*
|
||||||
|
|
||||||
- task: PublishSymbols@2
|
- task: PublishSymbols@2
|
||||||
displayName: Publish symbols path
|
displayName: Publish symbols path
|
||||||
continueOnError: True
|
continueOnError: True
|
||||||
inputs:
|
inputs:
|
||||||
SearchPattern: |
|
SearchPattern: |
|
||||||
$(Build.ArtifactStagingDirectory)/Symbols-$(BuildPlatform)/**/*.*
|
$(Build.ArtifactStagingDirectory)/Symbols-$(BuildPlatform)/**/*.*
|
||||||
IndexSources: false
|
IndexSources: false
|
||||||
SymbolServerType: TeamServices
|
SymbolServerType: TeamServices
|
||||||
|
|
||||||
- task: PublishBuildArtifacts@1
|
- template: .pipelines/installer-steps.yml@self
|
||||||
displayName: 'Publish Artifact: Symbols'
|
parameters:
|
||||||
inputs:
|
versionNumber: ${{ parameters.versionNumber }}
|
||||||
PathtoPublish: $(System.ArtifactsDirectory)/Symbols-$(BuildPlatform)/
|
perUserArg: "false"
|
||||||
ArtifactName: Symbols-${{ parameters.versionNumber }}-$(BuildPlatform)
|
buildSubDir: "MachineSetup"
|
||||||
|
installerPrefix: "PowerToysSetup"
|
||||||
|
|
||||||
- task: DeleteFiles@1
|
- task: PowerShell@2
|
||||||
displayName: 'Remove symbols from ArtifactStagingDirectory'
|
displayName: Clean installer dir before building per-user installer
|
||||||
inputs:
|
inputs:
|
||||||
Contents: '*'
|
targetType: inline
|
||||||
SourceFolder: $(Build.ArtifactStagingDirectory)/Symbols-$(BuildPlatform)/
|
script: git clean -xfd -e *exe -- .\installer\
|
||||||
RemoveSourceFolder: True
|
pwsh: true
|
||||||
|
|
||||||
- template: installer-steps.yml
|
- template: .pipelines/installer-steps.yml@self
|
||||||
parameters:
|
parameters:
|
||||||
versionNumber: ${{ parameters.versionNumber }}
|
versionNumber: ${{ parameters.versionNumber }}
|
||||||
perUserArg: "false"
|
perUserArg: "true"
|
||||||
buildSubDir: "MachineSetup"
|
buildSubDir: "UserSetup"
|
||||||
installerPrefix: "PowerToysSetup"
|
installerPrefix: "PowerToysUserSetup"
|
||||||
|
|
||||||
- task: PowerShell@2
|
- task: CopyFiles@2
|
||||||
displayName: Clean installer dir before building per-user installer
|
displayName: Copying setup file over
|
||||||
inputs:
|
inputs:
|
||||||
targetType: inline
|
contents: "**/PowerToys*Setup-*.exe"
|
||||||
script: git clean -xfd -e *exe -- .\installer\
|
flattenFolders: True
|
||||||
pwsh: true
|
targetFolder: $(Build.ArtifactStagingDirectory)
|
||||||
|
|
||||||
- template: installer-steps.yml
|
- task: PowerShell@2
|
||||||
parameters:
|
displayName: 'Calculating SHA256 hash'
|
||||||
versionNumber: ${{ parameters.versionNumber }}
|
inputs:
|
||||||
perUserArg: "true"
|
targetType: 'inline'
|
||||||
buildSubDir: "UserSetup"
|
script: |
|
||||||
installerPrefix: "PowerToysUserSetup"
|
$p = "$(System.ArtifactsDirectory)\";
|
||||||
|
$staging = "$(Build.ArtifactStagingDirectory)\"
|
||||||
|
$userHash = ((get-item $p\PowerToysUserSetup*.exe | Get-FileHash).Hash);
|
||||||
|
$machineHash = ((get-item $p\PowerToysSetup*.exe | Get-FileHash).Hash);
|
||||||
|
$userPlat = "hash_user_$(BuildPlatform).txt";
|
||||||
|
$machinePlat = "hash_machine_$(BuildPlatform).txt";
|
||||||
|
$combinedUserPath = $staging + $userPlat;
|
||||||
|
$combinedMachinePath = $staging + $machinePlat;
|
||||||
|
|
||||||
|
echo $p
|
||||||
|
|
||||||
- task: CopyFiles@2
|
echo $userPlat
|
||||||
displayName: Copying setup file over
|
echo $userHash
|
||||||
inputs:
|
echo $combinedUserPath
|
||||||
contents: "**/PowerToys*Setup-*.exe"
|
|
||||||
flattenFolders: True
|
|
||||||
targetFolder: $(Build.ArtifactStagingDirectory)
|
|
||||||
|
|
||||||
- task: PowerShell@2
|
echo $machinePlat
|
||||||
displayName: 'Calculating SHA256 hash'
|
echo $machineHash
|
||||||
inputs:
|
echo $combinedMachinePath
|
||||||
targetType: 'inline'
|
|
||||||
script: |
|
$userHash | out-file -filepath $combinedUserPath
|
||||||
$p = "$(System.ArtifactsDirectory)\";
|
$machineHash | out-file -filepath $combinedMachinePath
|
||||||
$staging = "$(Build.ArtifactStagingDirectory)\"
|
pwsh: true
|
||||||
$userHash = ((get-item $p\PowerToysUserSetup*.exe | Get-FileHash).Hash);
|
|
||||||
$machineHash = ((get-item $p\PowerToysSetup*.exe | Get-FileHash).Hash);
|
|
||||||
$userPlat = "hash_user_$(BuildPlatform).txt";
|
|
||||||
$machinePlat = "hash_machine_$(BuildPlatform).txt";
|
|
||||||
$combinedUserPath = $staging + $userPlat;
|
|
||||||
$combinedMachinePath = $staging + $machinePlat;
|
|
||||||
|
|
||||||
echo $p
|
|
||||||
|
|
||||||
echo $userPlat
|
|
||||||
echo $userHash
|
|
||||||
echo $combinedUserPath
|
|
||||||
|
|
||||||
echo $machinePlat
|
|
||||||
echo $machineHash
|
|
||||||
echo $combinedMachinePath
|
|
||||||
|
|
||||||
$userHash | out-file -filepath $combinedUserPath
|
|
||||||
$machineHash | out-file -filepath $combinedMachinePath
|
|
||||||
pwsh: true
|
|
||||||
|
|
||||||
- task: PublishBuildArtifacts@1
|
|
||||||
displayName: "Publish Artifact: PowerToySetup"
|
|
||||||
inputs:
|
|
||||||
PathtoPublish: $(System.ArtifactsDirectory)
|
|
||||||
ArtifactName: setup-$(BuildPlatform)
|
|
||||||
|
|
||||||
# Publishing the GPO files with a version number
|
|
||||||
- task: PublishBuildArtifacts@1
|
|
||||||
displayName: 'Publish Artifact: GPO Files'
|
|
||||||
inputs:
|
|
||||||
PathtoPublish: src\gpo\assets
|
|
||||||
ArtifactName: GroupPolicyObjectsFiles-${{ parameters.versionNumber }}
|
|
||||||
|
|
||||||
|
# Publishing the GPO files
|
||||||
|
- pwsh: |-
|
||||||
|
New-Item "$(Build.ArtifactStagingDirectory)/gpo" -Type Directory
|
||||||
|
Copy-Item src\gpo\assets\* "$(Build.ArtifactStagingDirectory)/gpo" -Recurse
|
||||||
|
displayName: Stage the GPO files
|
||||||
|
|
||||||
...
|
...
|
||||||
|
|||||||
7457
.pipelines/sdl.gdnbaselines
Normal file
7457
.pipelines/sdl.gdnbaselines
Normal file
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user