[Python-checkins] Remove Windows release build script (GH-92908)

zooba webhook-mailer at python.org
Wed May 18 09:26:41 EDT 2022


https://github.com/python/cpython/commit/3fa023721b495e02e1e6c89fdc737afc7d186cb5
commit: 3fa023721b495e02e1e6c89fdc737afc7d186cb5
branch: main
author: Steve Dower <steve.dower at python.org>
committer: zooba <steve.dower at microsoft.com>
date: 2022-05-18T14:26:36+01:00
summary:

Remove Windows release build script (GH-92908)

The scripts have been migrated to the release-tools repository

files:
D .azure-pipelines/windows-release.yml
D .azure-pipelines/windows-release/build-steps.yml
D .azure-pipelines/windows-release/checkout.yml
D .azure-pipelines/windows-release/find-sdk.yml
D .azure-pipelines/windows-release/layout-command.yml
D .azure-pipelines/windows-release/mingw-lib.yml
D .azure-pipelines/windows-release/msi-steps.yml
D .azure-pipelines/windows-release/stage-build.yml
D .azure-pipelines/windows-release/stage-layout-embed.yml
D .azure-pipelines/windows-release/stage-layout-full.yml
D .azure-pipelines/windows-release/stage-layout-msix.yml
D .azure-pipelines/windows-release/stage-layout-nuget.yml
D .azure-pipelines/windows-release/stage-msi.yml
D .azure-pipelines/windows-release/stage-pack-msix.yml
D .azure-pipelines/windows-release/stage-pack-nuget.yml
D .azure-pipelines/windows-release/stage-publish-nugetorg.yml
D .azure-pipelines/windows-release/stage-publish-pythonorg.yml
D .azure-pipelines/windows-release/stage-publish-store.yml
D .azure-pipelines/windows-release/stage-sign.yml
D .azure-pipelines/windows-release/stage-test-embed.yml
D .azure-pipelines/windows-release/stage-test-msi.yml
D .azure-pipelines/windows-release/stage-test-nuget.yml

diff --git a/.azure-pipelines/windows-release.yml b/.azure-pipelines/windows-release.yml
deleted file mode 100644
index 581f48ba22882..0000000000000
--- a/.azure-pipelines/windows-release.yml
+++ /dev/null
@@ -1,220 +0,0 @@
-name: Release_$(Build.SourceBranchName)_$(SourceTag)_$(Date:yyyyMMdd)$(Rev:.rr)
-
-parameters:
-- name: GitRemote
-  displayName: "Git remote"
-  type: string
-  default: python
-  values:
-  - 'python'
-  - 'pablogsal'
-  - 'ambv'
-  - '(Other)'
-- name: GitRemote_Other
-  displayName: "If Other, specify Git remote"
-  type: string
-  default: 'python'
-- name: SourceTag
-  displayName: "Git tag"
-  type: string
-  default: main
-- name: DoPublish
-  displayName: "Publish release"
-  type: boolean
-  default: false
-- name: SigningCertificate
-  displayName: "Code signing certificate"
-  type: string
-  default: 'Python Software Foundation'
-  values:
-  - 'Python Software Foundation'
-  - 'TestSign'
-  - 'Unsigned'
-- name: SigningDescription
-  displayName: "Signature description"
-  type: string
-  default: 'Built: $(Build.BuildNumber)'
-- name: DoARM64
-  displayName: "Publish ARM64 build"
-  type: boolean
-  default: true
-# Because there is no ARM64 Tcl/Tk pre-3.11, we need a separate option
-# to keep those builds working when the files are going to be absent.
-# Eventually when we stop releasing anything that old, we can drop this
-# argument (and make it implicitly always 'true')
-- name: ARM64TclTk
-  displayName: "Use Tcl/Tk for ARM64 (3.11 and later)"
-  type: boolean
-  default: true
-- name: DoPGO
-  displayName: "Run PGO"
-  type: boolean
-  default: true
-- name: DoCHM
-  displayName: "Produce compiled help document (pre-3.11)"
-  type: boolean
-  default: false
-- name: DoLayout
-  displayName: "Produce full layout artifact"
-  type: boolean
-  default: true
-- name: DoMSIX
-  displayName: "Produce Store packages"
-  type: boolean
-  default: true
-- name: DoNuget
-  displayName: "Produce Nuget packages"
-  type: boolean
-  default: true
-- name: DoEmbed
-  displayName: "Produce embeddable package"
-  type: boolean
-  default: true
-- name: DoMSI
-  displayName: "Produce EXE/MSI installer"
-  type: boolean
-  default: true
-- name: BuildToPublish
-  displayName: "Build number to publish (0 to skip)"
-  type: number
-  default: '0'
-
-variables:
-  __RealSigningCertificate: 'Python Software Foundation'
-  ${{ if ne(parameters.GitRemote, '(Other)') }}:
-    GitRemote: ${{ parameters.GitRemote }}
-  ${{ else }}:
-    GitRemote: ${{ parameters.GitRemote_Other }}
-  SourceTag: ${{ parameters.SourceTag }}
-  DoPGO: ${{ parameters.DoPGO }}
-  ${{ if ne(parameters.SigningCertificate, 'Unsigned') }}:
-    SigningCertificate: ${{ parameters.SigningCertificate }}
-  SigningDescription: ${{ parameters.SigningDescription }}
-  DoCHM: ${{ parameters.DoCHM }}
-  DoLayout: ${{ parameters.DoLayout }}
-  DoMSIX: ${{ parameters.DoMSIX }}
-  DoNuget: ${{ parameters.DoNuget }}
-  DoEmbed: ${{ parameters.DoEmbed }}
-  DoMSI: ${{ parameters.DoMSI }}
-  DoPublish: ${{ parameters.DoPublish }}
-  PublishARM64: ${{ parameters.DoARM64 }}
-# QUEUE TIME VARIABLES
-#  PyDotOrgUsername: ''
-#  PyDotOrgServer: ''
-
-trigger: none
-pr: none
-
-stages:
-- ${{ if eq(parameters.BuildToPublish, '0') }}:
-  - stage: Build
-    displayName: Build binaries
-    jobs:
-    - template: windows-release/stage-build.yml
-      parameters:
-        ARM64TclTk: ${{ parameters.ARM64TclTk }}
-
-  - stage: Sign
-    displayName: Sign binaries
-    dependsOn: Build
-    jobs:
-    - template: windows-release/stage-sign.yml
-
-  - stage: Layout
-    displayName: Generate layouts
-    dependsOn: Sign
-    jobs:
-    - template: windows-release/stage-layout-full.yml
-      parameters:
-        ARM64TclTk: ${{ parameters.ARM64TclTk }}
-    - template: windows-release/stage-layout-embed.yml
-    - template: windows-release/stage-layout-nuget.yml
-
-  - stage: Pack
-    dependsOn: Layout
-    jobs:
-    - template: windows-release/stage-pack-nuget.yml
-
-  - stage: Test
-    dependsOn: Pack
-    jobs:
-    - template: windows-release/stage-test-embed.yml
-    - template: windows-release/stage-test-nuget.yml
-
-  - ${{ if eq(parameters.DoMSIX, 'true') }}:
-    - stage: Layout_MSIX
-      displayName: Generate MSIX layouts
-      dependsOn: Sign
-      jobs:
-      - template: windows-release/stage-layout-msix.yml
-        parameters:
-          ARM64TclTk: ${{ parameters.ARM64TclTk }}
-
-    - stage: Pack_MSIX
-      displayName: Package MSIX
-      dependsOn: Layout_MSIX
-      jobs:
-      - template: windows-release/stage-pack-msix.yml
-
-  - ${{ if eq(parameters.DoMSI, 'true') }}:
-    - stage: Build_MSI
-      displayName: Build MSI installer
-      dependsOn: Sign
-      jobs:
-      - template: windows-release/stage-msi.yml
-        parameters:
-          ARM64TclTk: ${{ parameters.ARM64TclTk }}
-
-    - stage: Test_MSI
-      displayName: Test MSI installer
-      dependsOn: Build_MSI
-      jobs:
-      - template: windows-release/stage-test-msi.yml
-
-  - ${{ if eq(parameters.DoPublish, 'true') }}:
-    - ${{ if eq(parameters.DoMSI, 'true') }}:
-      - stage: PublishPyDotOrg
-        displayName: Publish to python.org
-        dependsOn: ['Test_MSI', 'Test']
-        jobs:
-        - template: windows-release/stage-publish-pythonorg.yml
-
-    - ${{ if eq(parameters.DoNuget, 'true') }}:
-      - stage: PublishNuget
-        displayName: Publish to nuget.org
-        ${{ if eq(parameters.DoMSI, 'true') }}:
-          dependsOn: ['Test_MSI', 'Test']
-        ${{ else }}:
-          dependsOn: 'Test'
-        jobs:
-        - template: windows-release/stage-publish-nugetorg.yml
-
-    - ${{ if eq(parameters.DoMSIX, 'true') }}:
-      - stage: PublishStore
-        displayName: Publish to Store
-        ${{ if eq(parameters.DoMSI, 'true') }}:
-          dependsOn: ['Test_MSI', 'Pack_MSIX']
-        ${{ else }}:
-          dependsOn: 'Pack_MSIX'
-        jobs:
-        - template: windows-release/stage-publish-store.yml
-
-- ${{ else }}:
-  - stage: PublishExisting
-    displayName: Publish existing build
-    dependsOn: []
-    jobs:
-    - ${{ if eq(parameters.DoMSI, 'true') }}:
-      - template: windows-release/stage-publish-pythonorg.yml
-        parameters:
-          BuildToPublish: ${{ parameters.BuildToPublish }}
-
-    - ${{ if eq(parameters.DoNuget, 'true') }}:
-      - template: windows-release/stage-publish-nugetorg.yml
-        parameters:
-          BuildToPublish: ${{ parameters.BuildToPublish }}
-
-    - ${{ if eq(parameters.DoMSIX, 'true') }}:
-      - template: windows-release/stage-publish-store.yml
-        parameters:
-          BuildToPublish: ${{ parameters.BuildToPublish }}
diff --git a/.azure-pipelines/windows-release/build-steps.yml b/.azure-pipelines/windows-release/build-steps.yml
deleted file mode 100644
index 5ca2016d65f9e..0000000000000
--- a/.azure-pipelines/windows-release/build-steps.yml
+++ /dev/null
@@ -1,84 +0,0 @@
-parameters:
-  ShouldPGO: false
-
-steps:
-- template: ./checkout.yml
-
-- powershell: |
-    $d = (.\PCbuild\build.bat -V) | %{ if($_ -match '\s+(\w+):\s*(.+)\s*$') { @{$Matches[1] = $Matches[2];} }};
-    Write-Host "##vso[task.setvariable variable=VersionText]$($d.PythonVersion)"
-    Write-Host "##vso[task.setvariable variable=VersionNumber]$($d.PythonVersionNumber)"
-    Write-Host "##vso[task.setvariable variable=VersionHex]$($d.PythonVersionHex)"
-    Write-Host "##vso[task.setvariable variable=VersionUnique]$($d.PythonVersionUnique)"
-    Write-Host "##vso[build.addbuildtag]$($d.PythonVersion)"
-    Write-Host "##vso[build.addbuildtag]$($d.PythonVersion)-$(Name)"
-  displayName: 'Extract version numbers'
-
-- ${{ if eq(parameters.ShouldPGO, 'false') }}:
-  - powershell: |
-      $env:SigningCertificate = $null
-      .\PCbuild\build.bat -v -p $(Platform) -c $(Configuration)
-    displayName: 'Run build'
-    env:
-      IncludeUwp: true
-      Py_OutDir: '$(Build.BinariesDirectory)\bin'
-
-- ${{ if eq(parameters.ShouldPGO, 'true') }}:
-  - powershell: |
-      $env:SigningCertificate = $null
-      .\PCbuild\build.bat -v -p $(Platform) --pgo
-    displayName: 'Run build with PGO'
-    env:
-      IncludeUwp: true
-      Py_OutDir: '$(Build.BinariesDirectory)\bin'
-
-- powershell: |
-    $kitroot = (gp 'HKLM:\SOFTWARE\Microsoft\Windows Kits\Installed Roots\').KitsRoot10
-    $tool = (gci -r "$kitroot\Bin\*\x64\signtool.exe" | sort FullName -Desc | select -First 1)
-    if (-not $tool) {
-      throw "SDK is not available"
-    }
-    Write-Host "##vso[task.prependpath]$($tool.Directory)"
-  displayName: 'Add WinSDK tools to path'
-
-- powershell: |
-    $env:SigningCertificate = $null
-    $(_HostPython) PC\layout -vv -b "$(Build.BinariesDirectory)\bin" -t "$(Build.BinariesDirectory)\catalog" --catalog "${env:CAT}.cdf" --preset-default --arch $(Arch)
-    makecat "${env:CAT}.cdf"
-    del "${env:CAT}.cdf"
-    if (-not (Test-Path "${env:CAT}.cat")) {
-      throw "Failed to build catalog file"
-    }
-  displayName: 'Generate catalog'
-  env:
-    CAT: $(Build.BinariesDirectory)\bin\$(Arch)\python
-    PYTHON_HEXVERSION: $(VersionHex)
-
-- task: PublishPipelineArtifact at 0
-  displayName: 'Publish binaries'
-  condition: and(succeeded(), not(and(eq(variables['Configuration'], 'Release'), variables['SigningCertificate'])))
-  inputs:
-    targetPath: '$(Build.BinariesDirectory)\bin\$(Arch)'
-    artifactName: bin_$(Name)
-
-- task: PublishPipelineArtifact at 0
-  displayName: 'Publish binaries for signing'
-  condition: and(succeeded(), and(eq(variables['Configuration'], 'Release'), variables['SigningCertificate']))
-  inputs:
-    targetPath: '$(Build.BinariesDirectory)\bin\$(Arch)'
-    artifactName: unsigned_bin_$(Name)
-
-- task: CopyFiles at 2
-  displayName: 'Layout Artifact: symbols'
-  inputs:
-    sourceFolder: $(Build.BinariesDirectory)\bin\$(Arch)
-    targetFolder: $(Build.ArtifactStagingDirectory)\symbols\$(Name)
-    flatten: true
-    contents: |
-      **\*.pdb
-
-- task: PublishBuildArtifacts at 1
-  displayName: 'Publish Artifact: symbols'
-  inputs:
-    PathToPublish: '$(Build.ArtifactStagingDirectory)\symbols'
-    ArtifactName: symbols
diff --git a/.azure-pipelines/windows-release/checkout.yml b/.azure-pipelines/windows-release/checkout.yml
deleted file mode 100644
index d42d55fff08dd..0000000000000
--- a/.azure-pipelines/windows-release/checkout.yml
+++ /dev/null
@@ -1,21 +0,0 @@
-parameters:
-  depth: 3
-
-steps:
-- checkout: none
-
-- script: git clone --progress -v --depth ${{ parameters.depth }} --branch $(SourceTag) --single-branch https://github.com/$(GitRemote)/cpython.git .
-  displayName: 'git clone ($(GitRemote)/$(SourceTag))'
-  condition: and(succeeded(), and(variables['GitRemote'], variables['SourceTag']))
-
-- script: git clone --progress -v --depth ${{ parameters.depth }} --branch $(SourceTag) --single-branch $(Build.Repository.Uri) .
-  displayName: 'git clone (<default>/$(SourceTag))'
-  condition: and(succeeded(), and(not(variables['GitRemote']), variables['SourceTag']))
-
-- script: git clone --progress -v --depth ${{ parameters.depth }} --branch $(Build.SourceBranchName) --single-branch https://github.com/$(GitRemote)/cpython.git .
-  displayName: 'git clone ($(GitRemote)/<default>)'
-  condition: and(succeeded(), and(variables['GitRemote'], not(variables['SourceTag'])))
-
-- script: git clone --progress -v --depth ${{ parameters.depth }} --branch $(Build.SourceBranchName) --single-branch $(Build.Repository.Uri) .
-  displayName: 'git clone'
-  condition: and(succeeded(), and(not(variables['GitRemote']), not(variables['SourceTag'])))
diff --git a/.azure-pipelines/windows-release/find-sdk.yml b/.azure-pipelines/windows-release/find-sdk.yml
deleted file mode 100644
index e4de78555b3f6..0000000000000
--- a/.azure-pipelines/windows-release/find-sdk.yml
+++ /dev/null
@@ -1,17 +0,0 @@
-# Locate the Windows SDK and add its binaries directory to PATH
-#
-# `toolname` can be overridden to use a different marker file.
-
-parameters:
-  toolname: signtool.exe
-
-steps:
-  - powershell: |
-      $kitroot = (gp 'HKLM:\SOFTWARE\Microsoft\Windows Kits\Installed Roots\').KitsRoot10
-      $tool = (gci -r "$kitroot\Bin\*\${{ parameters.toolname }}" | sort FullName -Desc | select -First 1)
-      if (-not $tool) {
-          throw "SDK is not available"
-      }
-      Write-Host "##vso[task.prependpath]$($tool.Directory)"
-      Write-Host "Adding $($tool.Directory) to PATH"
-    displayName: 'Add WinSDK tools to path'
diff --git a/.azure-pipelines/windows-release/layout-command.yml b/.azure-pipelines/windows-release/layout-command.yml
deleted file mode 100644
index 406ccd859faa6..0000000000000
--- a/.azure-pipelines/windows-release/layout-command.yml
+++ /dev/null
@@ -1,23 +0,0 @@
-steps:
-- task: DownloadPipelineArtifact at 1
-  displayName: 'Download artifact: bin_$(HostArch)'
-  condition: and(succeeded(), variables['HostArch'])
-  inputs:
-    artifactName: bin_$(HostArch)
-    targetPath: $(Build.BinariesDirectory)\bin_$(HostArch)
-
-- powershell: >
-    Write-Host (
-    '##vso[task.setvariable variable=LayoutCmd]&
-    "$(Python)"
-    "{1}\PC\layout"
-    -vv
-    --source "{1}"
-    --build "{0}\bin"
-    --arch "$(Name)"
-    --temp "{0}\layout-temp"
-    --include-cat "{0}\bin\python.cat"
-    --doc-build "{0}\doc"'
-    -f ("$(Build.BinariesDirectory)", "$(Build.SourcesDirectory)")
-    )
-  displayName: 'Set LayoutCmd'
diff --git a/.azure-pipelines/windows-release/mingw-lib.yml b/.azure-pipelines/windows-release/mingw-lib.yml
deleted file mode 100644
index 30f7d34fa61d2..0000000000000
--- a/.azure-pipelines/windows-release/mingw-lib.yml
+++ /dev/null
@@ -1,13 +0,0 @@
-parameters:
-  DllToolOpt: -m i386:x86-64
-  #DllToolOpt: -m i386 --as-flags=--32
-
-steps:
-- powershell: |
-    git clone https://github.com/python/cpython-bin-deps --branch binutils --single-branch --depth 1 --progress -v "binutils"
-    gci "bin\$(Arch)\python*.dll" | %{
-      & "binutils\gendef.exe" $_ | Out-File -Encoding ascii tmp.def
-      & "binutils\dlltool.exe" --dllname $($_.BaseName).dll --def tmp.def --output-lib "$($_.Directory)\lib$($_.BaseName).a" ${{ parameters.DllToolOpt }}
-    }
-  displayName: 'Generate MinGW import library'
-  workingDirectory: $(Build.BinariesDirectory)
diff --git a/.azure-pipelines/windows-release/msi-steps.yml b/.azure-pipelines/windows-release/msi-steps.yml
deleted file mode 100644
index 79fc6f5ed292d..0000000000000
--- a/.azure-pipelines/windows-release/msi-steps.yml
+++ /dev/null
@@ -1,181 +0,0 @@
-parameters:
-  ARM64TclTk: true
-
-steps:
-  - template: ./checkout.yml
-
-  - powershell: |
-      $d = (.\PCbuild\build.bat -V) | %{ if($_ -match '\s+(\w+):\s*(.+)\s*$') { @{$Matches[1] = $Matches[2];} }};
-      Write-Host "##vso[task.setvariable variable=SigningDescription]Python $($d.PythonVersion)"
-    displayName: 'Update signing description'
-    condition: and(succeeded(), not(variables['SigningDescription']))
-
-  - task: DownloadPipelineArtifact at 1
-    displayName: 'Download artifact: doc'
-    inputs:
-      artifactName: doc
-      targetPath: $(Build.BinariesDirectory)\doc
-
-  - task: CopyFiles at 2
-    displayName: 'Merge documentation files'
-    inputs:
-      sourceFolder: $(Build.BinariesDirectory)\doc
-      targetFolder: $(Build.SourcesDirectory)\Doc\build
-
-  - task: DownloadPipelineArtifact at 1
-    displayName: 'Download artifact: bin_win32'
-    inputs:
-      artifactName: bin_win32
-      targetPath: $(Build.BinariesDirectory)\win32
-
-  - task: DownloadPipelineArtifact at 1
-    displayName: 'Download artifact: bin_win32_d'
-    inputs:
-      artifactName: bin_win32_d
-      targetPath: $(Build.BinariesDirectory)\win32
-
-  - task: DownloadPipelineArtifact at 1
-    displayName: 'Download artifact: bin_amd64'
-    inputs:
-      artifactName: bin_amd64
-      targetPath: $(Build.BinariesDirectory)\amd64
-
-  - task: DownloadPipelineArtifact at 1
-    displayName: 'Download artifact: bin_amd64_d'
-    inputs:
-      artifactName: bin_amd64_d
-      targetPath: $(Build.BinariesDirectory)\amd64
-
-  - task: DownloadPipelineArtifact at 1
-    displayName: 'Download artifact: bin_arm64'
-    condition: and(succeeded(), eq(variables['PublishARM64'], 'true'))
-    inputs:
-      artifactName: bin_arm64
-      targetPath: $(Build.BinariesDirectory)\arm64
-
-  - task: DownloadPipelineArtifact at 1
-    displayName: 'Download artifact: bin_arm64_d'
-    condition: and(succeeded(), eq(variables['PublishARM64'], 'true'))
-    inputs:
-      artifactName: bin_arm64_d
-      targetPath: $(Build.BinariesDirectory)\arm64
-
-  - task: DownloadPipelineArtifact at 1
-    displayName: 'Download artifact: tcltk_lib_win32'
-    inputs:
-      artifactName: tcltk_lib_win32
-      targetPath: $(Build.BinariesDirectory)\tcltk_lib_win32
-
-  - task: DownloadPipelineArtifact at 1
-    displayName: 'Download artifact: tcltk_lib_amd64'
-    inputs:
-      artifactName: tcltk_lib_amd64
-      targetPath: $(Build.BinariesDirectory)\tcltk_lib_amd64
-
-  - ${{ if eq(parameters.ARM64TclTk, true) }}:
-    - task: DownloadPipelineArtifact at 1
-      displayName: 'Download artifact: tcltk_lib_arm64'
-      condition: and(succeeded(), eq(variables['PublishARM64'], 'true'))
-      inputs:
-        artifactName: tcltk_lib_arm64
-        targetPath: $(Build.BinariesDirectory)\tcltk_lib_arm64
-
-  - powershell: |
-      copy $(Build.BinariesDirectory)\amd64\Activate.ps1 Lib\venv\scripts\common\Activate.ps1 -Force
-    displayName: 'Copy signed files into sources'
-    condition: and(succeeded(), variables['SigningCertificate'])
-
-  - script: |
-      call Tools\msi\get_externals.bat
-      call PCbuild\find_python.bat
-      echo ##vso[task.setvariable variable=PYTHON]%PYTHON%
-      call PCbuild/find_msbuild.bat
-      echo ##vso[task.setvariable variable=MSBUILD]%MSBUILD%
-    displayName: 'Get external dependencies'
-
-  - script: |
-      %PYTHON% -m pip install blurb
-      %PYTHON% -m blurb merge -f Misc\NEWS
-    displayName: 'Merge NEWS file'
-
-  - script: |
-      %MSBUILD% Tools\msi\launcher\launcher.wixproj
-    displayName: 'Build launcher installer'
-    env:
-      Platform: x86
-      Py_OutDir: $(Build.BinariesDirectory)
-
-  - script: |
-      %MSBUILD% Tools\msi\bundle\releaselocal.wixproj /t:Rebuild /p:RebuildAll=true
-    displayName: 'Build win32 installer'
-    env:
-      Platform: x86
-      Py_OutDir: $(Build.BinariesDirectory)
-      PYTHON: $(Build.BinariesDirectory)\win32\python.exe
-      PythonForBuild: $(Build.BinariesDirectory)\win32\python.exe
-      PYTHONHOME: $(Build.SourcesDirectory)
-      TclTkLibraryDir: $(Build.BinariesDirectory)\tcltk_lib_win32
-      BuildForRelease: true
-
-  - script: |
-      %MSBUILD% Tools\msi\bundle\releaselocal.wixproj /t:Rebuild /p:RebuildAll=true
-    displayName: 'Build amd64 installer'
-    env:
-      Platform: x64
-      Py_OutDir: $(Build.BinariesDirectory)
-      PYTHON: $(Build.BinariesDirectory)\amd64\python.exe
-      PythonForBuild: $(Build.BinariesDirectory)\amd64\python.exe
-      PYTHONHOME: $(Build.SourcesDirectory)
-      TclTkLibraryDir: $(Build.BinariesDirectory)\tcltk_lib_amd64
-      BuildForRelease: true
-
-  - script: |
-      %MSBUILD% Tools\msi\bundle\releaselocal.wixproj /t:Rebuild /p:RebuildAll=true
-    displayName: 'Build arm64 installer'
-    condition: and(succeeded(), eq(variables['PublishARM64'], 'true'))
-    env:
-      Platform: ARM64
-      Py_OutDir: $(Build.BinariesDirectory)
-      PYTHON: $(Build.BinariesDirectory)\win32\python.exe
-      PythonForBuild: $(Build.BinariesDirectory)\win32\python.exe
-      PYTHONHOME: $(Build.SourcesDirectory)
-      BuildForRelease: true
-      ${{ if eq(parameters.ARM64TclTk, true) }}:
-        TclTkLibraryDir: $(Build.BinariesDirectory)\tcltk_lib_arm64
-
-  - task: CopyFiles at 2
-    displayName: 'Assemble artifact: msi (win32)'
-    inputs:
-      sourceFolder: $(Build.BinariesDirectory)\win32\en-us
-      targetFolder: $(Build.ArtifactStagingDirectory)\msi\win32
-      contents: |
-        *.msi
-        *.cab
-        *.exe
-
-  - task: CopyFiles at 2
-    displayName: 'Assemble artifact: msi (amd64)'
-    inputs:
-      sourceFolder: $(Build.BinariesDirectory)\amd64\en-us
-      targetFolder: $(Build.ArtifactStagingDirectory)\msi\amd64
-      contents: |
-        *.msi
-        *.cab
-        *.exe
-
-  - task: CopyFiles at 2
-    displayName: 'Assemble artifact: msi (arm64)'
-    condition: and(succeeded(), eq(variables['PublishARM64'], 'true'))
-    inputs:
-      sourceFolder: $(Build.BinariesDirectory)\arm64\en-us
-      targetFolder: $(Build.ArtifactStagingDirectory)\msi\arm64
-      contents: |
-        *.msi
-        *.cab
-        *.exe
-
-  - task: PublishPipelineArtifact at 0
-    displayName: 'Publish MSI'
-    inputs:
-      targetPath: '$(Build.ArtifactStagingDirectory)\msi'
-      artifactName: msi
diff --git a/.azure-pipelines/windows-release/stage-build.yml b/.azure-pipelines/windows-release/stage-build.yml
deleted file mode 100644
index 26f4317750436..0000000000000
--- a/.azure-pipelines/windows-release/stage-build.yml
+++ /dev/null
@@ -1,193 +0,0 @@
-parameters:
-  ARM64TclTk: true
-
-jobs:
-- job: Build_Docs
-  displayName: Docs build
-  pool:
-    vmImage: windows-2022
-
-  workspace:
-    clean: all
-
-  steps:
-  - template: ./checkout.yml
-
-  - script: Doc\make.bat html
-    displayName: 'Build HTML docs'
-    env:
-      BUILDDIR: $(Build.BinariesDirectory)\Doc
-
-  - script: Doc\make.bat htmlhelp
-    displayName: 'Build CHM docs'
-    condition: and(succeeded(), eq(variables['DoCHM'], 'true'))
-    env:
-      BUILDDIR: $(Build.BinariesDirectory)\Doc
-
-  - task: CopyFiles at 2
-    displayName: 'Assemble artifact: Doc'
-    inputs:
-      sourceFolder: $(Build.BinariesDirectory)\Doc
-      targetFolder: $(Build.ArtifactStagingDirectory)\Doc
-      contents: |
-        html\**\*
-        htmlhelp\*.chm
-
-  - task: PublishPipelineArtifact at 0
-    displayName: 'Publish artifact: doc'
-    inputs:
-      targetPath: $(Build.ArtifactStagingDirectory)\Doc
-      artifactName: doc
-
-
-- job: Build_Python
-  displayName: Python build
-
-  pool:
-    vmImage: windows-2022
-
-  workspace:
-    clean: all
-
-  strategy:
-    matrix:
-      win32:
-        Name: win32
-        Arch: win32
-        Platform: x86
-        Configuration: Release
-        _HostPython: .\python
-      win32_d:
-        Name: win32_d
-        Arch: win32
-        Platform: x86
-        Configuration: Debug
-        _HostPython: .\python
-      amd64_d:
-        Name: amd64_d
-        Arch: amd64
-        Platform: x64
-        Configuration: Debug
-        _HostPython: .\python
-      arm64:
-        Name: arm64
-        Arch: arm64
-        Platform: ARM64
-        Configuration: Release
-        _HostPython: python
-      arm64_d:
-        Name: arm64_d
-        Arch: arm64
-        Platform: ARM64
-        Configuration: Debug
-        _HostPython: python
-
-  steps:
-    - template: ./build-steps.yml
-
-- job: Build_Python_NonPGO
-  displayName: Python non-PGO build
-  condition: and(succeeded(), ne(variables['DoPGO'], 'true'))
-
-  pool:
-    vmImage: windows-2022
-
-  workspace:
-    clean: all
-
-  strategy:
-    matrix:
-      amd64:
-        Name: amd64
-        Arch: amd64
-        Platform: x64
-        Configuration: Release
-        _HostPython: .\python
-
-  steps:
-    - template: ./build-steps.yml
-
-
-- job: Build_Python_PGO
-  displayName: Python PGO build
-  condition: and(succeeded(), eq(variables['DoPGO'], 'true'))
-
-  # Allow up to five hours for PGO
-  timeoutInMinutes: 300
-
-  pool:
-    name: 'Windows Release'
-
-  workspace:
-    clean: all
-
-  strategy:
-    matrix:
-      amd64:
-        Name: amd64
-        Arch: amd64
-        Platform: x64
-        Configuration: Release
-        _HostPython: .\python
-
-  steps:
-    - template: ./build-steps.yml
-      parameters:
-        ShouldPGO: true
-
-
-- job: TclTk_Lib
-  displayName: Publish Tcl/Tk Library
-
-  pool:
-    vmImage: windows-2022
-
-  workspace:
-    clean: all
-
-  steps:
-  - template: ./checkout.yml
-
-  - script: PCbuild\get_externals.bat --no-openssl --no-libffi
-    displayName: 'Get external dependencies'
-
-  - task: MSBuild at 1
-    displayName: 'Copy Tcl/Tk lib for publish'
-    inputs:
-      solution: PCbuild\tcltk.props
-      platform: x86
-      msbuildArguments: /t:CopyTclTkLib /p:OutDir="$(Build.ArtifactStagingDirectory)\tcl_win32"
-
-  - task: MSBuild at 1
-    displayName: 'Copy Tcl/Tk lib for publish'
-    inputs:
-      solution: PCbuild\tcltk.props
-      platform: x64
-      msbuildArguments: /t:CopyTclTkLib /p:OutDir="$(Build.ArtifactStagingDirectory)\tcl_amd64"
-
-  - ${{ if eq(parameters.ARM64TclTk, true) }}:
-    - task: MSBuild at 1
-      displayName: 'Copy Tcl/Tk lib for publish'
-      inputs:
-        solution: PCbuild\tcltk.props
-        platform: ARM64
-        msbuildArguments: /t:CopyTclTkLib /p:OutDir="$(Build.ArtifactStagingDirectory)\tcl_arm64"
-
-  - task: PublishPipelineArtifact at 0
-    displayName: 'Publish artifact: tcltk_lib_win32'
-    inputs:
-      targetPath: '$(Build.ArtifactStagingDirectory)\tcl_win32'
-      artifactName: tcltk_lib_win32
-
-  - task: PublishPipelineArtifact at 0
-    displayName: 'Publish artifact: tcltk_lib_amd64'
-    inputs:
-      targetPath: '$(Build.ArtifactStagingDirectory)\tcl_amd64'
-      artifactName: tcltk_lib_amd64
-
-  - ${{ if eq(parameters.ARM64TclTk, true) }}:
-    - task: PublishPipelineArtifact at 0
-      displayName: 'Publish artifact: tcltk_lib_arm64'
-      inputs:
-        targetPath: '$(Build.ArtifactStagingDirectory)\tcl_arm64'
-        artifactName: tcltk_lib_arm64
diff --git a/.azure-pipelines/windows-release/stage-layout-embed.yml b/.azure-pipelines/windows-release/stage-layout-embed.yml
deleted file mode 100644
index c8b23d308d81e..0000000000000
--- a/.azure-pipelines/windows-release/stage-layout-embed.yml
+++ /dev/null
@@ -1,61 +0,0 @@
-jobs:
-- job: Make_Embed_Layout
-  displayName: Make embeddable layout
-  condition: and(succeeded(), eq(variables['DoEmbed'], 'true'))
-
-  pool:
-    vmImage: windows-2022
-
-  workspace:
-    clean: all
-
-  strategy:
-    matrix:
-      win32:
-        Name: win32
-        Python: $(Build.BinariesDirectory)\bin\python.exe
-        PYTHONHOME: $(Build.SourcesDirectory)
-      amd64:
-        Name: amd64
-        Python: $(Build.BinariesDirectory)\bin\python.exe
-        PYTHONHOME: $(Build.SourcesDirectory)
-      arm64:
-        Name: arm64
-        HostArch: amd64
-        Python: $(Build.BinariesDirectory)\bin_amd64\python.exe
-        PYTHONHOME: $(Build.SourcesDirectory)
-
-  steps:
-  - template: ./checkout.yml
-
-  - task: DownloadPipelineArtifact at 1
-    displayName: 'Download artifact: bin_$(Name)'
-    inputs:
-      artifactName: bin_$(Name)
-      targetPath: $(Build.BinariesDirectory)\bin
-
-  - template: ./layout-command.yml
-
-  - powershell: |
-      $d = (.\PCbuild\build.bat -V) | %{ if($_ -match '\s+(\w+):\s*(.+)\s*$') { @{$Matches[1] = $Matches[2];} }};
-      Write-Host "##vso[task.setvariable variable=VersionText]$($d.PythonVersion)"
-    displayName: 'Extract version numbers'
-
-  - powershell: >
-      $(LayoutCmd)
-      --copy "$(Build.ArtifactStagingDirectory)\layout"
-      --zip "$(Build.ArtifactStagingDirectory)\embed\python-$(VersionText)-embed-$(Name).zip"
-      --preset-embed
-    displayName: 'Generate embeddable layout'
-
-  - task: PublishPipelineArtifact at 0
-    displayName: 'Publish Artifact: layout_embed_$(Name)'
-    inputs:
-      targetPath: '$(Build.ArtifactStagingDirectory)\layout'
-      artifactName: layout_embed_$(Name)
-
-  - task: PublishBuildArtifacts at 1
-    displayName: 'Publish Artifact: embed'
-    inputs:
-      PathtoPublish: '$(Build.ArtifactStagingDirectory)\embed'
-      ArtifactName: embed
diff --git a/.azure-pipelines/windows-release/stage-layout-full.yml b/.azure-pipelines/windows-release/stage-layout-full.yml
deleted file mode 100644
index 343ee1f73c215..0000000000000
--- a/.azure-pipelines/windows-release/stage-layout-full.yml
+++ /dev/null
@@ -1,80 +0,0 @@
-parameters:
-  ARM64TclTk: true
-
-jobs:
-- job: Make_Layouts
-  displayName: Make layouts
-  condition: and(succeeded(), eq(variables['DoLayout'], 'true'))
-
-  pool:
-    vmImage: windows-2022
-
-  workspace:
-    clean: all
-
-  strategy:
-    matrix:
-      win32:
-        Name: win32
-        Python: $(Build.BinariesDirectory)\bin\python.exe
-        PYTHONHOME: $(Build.SourcesDirectory)
-        TclLibrary: $(Build.BinariesDirectory)\tcltk_lib\tcl8
-      amd64:
-        Name: amd64
-        Python: $(Build.BinariesDirectory)\bin\python.exe
-        PYTHONHOME: $(Build.SourcesDirectory)
-        TclLibrary: $(Build.BinariesDirectory)\tcltk_lib\tcl8
-      arm64:
-        Name: arm64
-        HostArch: amd64
-        Python: $(Build.BinariesDirectory)\bin_amd64\python.exe
-        PYTHONHOME: $(Build.SourcesDirectory)
-        ${{ if eq(parameters.ARM64TclTk, true) }}:
-          TclLibrary: $(Build.BinariesDirectory)\tcltk_lib\tcl8
-
-  steps:
-  - template: ./checkout.yml
-
-  - task: DownloadPipelineArtifact at 1
-    displayName: 'Download artifact: bin_$(Name)'
-    inputs:
-      artifactName: bin_$(Name)
-      targetPath: $(Build.BinariesDirectory)\bin
-
-  - task: DownloadPipelineArtifact at 1
-    displayName: 'Download artifact: bin_$(Name)_d'
-    inputs:
-      artifactName: bin_$(Name)_d
-      targetPath: $(Build.BinariesDirectory)\bin
-
-  - task: DownloadPipelineArtifact at 1
-    displayName: 'Download artifact: doc'
-    inputs:
-      artifactName: doc
-      targetPath: $(Build.BinariesDirectory)\doc
-
-  - task: DownloadPipelineArtifact at 1
-    displayName: 'Download artifact: tcltk_lib_$(Name)'
-    condition: and(succeeded(), variables['TclLibrary'])
-    inputs:
-      artifactName: tcltk_lib_$(Name)
-      targetPath: $(Build.BinariesDirectory)\tcltk_lib
-
-  - powershell: |
-      copy "$(Build.BinariesDirectory)\bin\Activate.ps1" Lib\venv\scripts\common\Activate.ps1 -Force
-    displayName: 'Copy signed files into sources'
-    condition: and(succeeded(), variables['SigningCertificate'])
-
-  - template: ./layout-command.yml
-
-  - powershell: |
-      $(LayoutCmd) --copy "$(Build.ArtifactStagingDirectory)\layout" --preset-default
-    displayName: 'Generate full layout'
-    env:
-      TCL_LIBRARY: $(TclLibrary)
-
-  - task: PublishPipelineArtifact at 0
-    displayName: 'Publish Artifact: layout_full_$(Name)'
-    inputs:
-      targetPath: '$(Build.ArtifactStagingDirectory)\layout'
-      artifactName: layout_full_$(Name)
diff --git a/.azure-pipelines/windows-release/stage-layout-msix.yml b/.azure-pipelines/windows-release/stage-layout-msix.yml
deleted file mode 100644
index a44e1ede20326..0000000000000
--- a/.azure-pipelines/windows-release/stage-layout-msix.yml
+++ /dev/null
@@ -1,102 +0,0 @@
-parameters:
-  ARM64TclTk: true
-
-jobs:
-- job: Make_MSIX_Layout
-  displayName: Make MSIX layout
-
-  pool:
-    vmImage: windows-2022
-
-  workspace:
-    clean: all
-
-  strategy:
-    matrix:
-      #win32:
-      #  Name: win32
-      #  Python: $(Build.BinariesDirectory)\bin\python.exe
-      #  PYTHONHOME: $(Build.SourcesDirectory)
-      #  TclLibrary: $(Build.BinariesDirectory)\tcltk_lib\tcl8
-      amd64:
-        Name: amd64
-        Python: $(Build.BinariesDirectory)\bin\python.exe
-        PYTHONHOME: $(Build.SourcesDirectory)
-        TclLibrary: $(Build.BinariesDirectory)\tcltk_lib\tcl8
-      arm64:
-        Name: arm64
-        HostArch: amd64
-        Python: $(Build.BinariesDirectory)\bin_amd64\python.exe
-        PYTHONHOME: $(Build.SourcesDirectory)
-        ${{ if eq(parameters.ARM64TclTk, true) }}:
-          TclLibrary: $(Build.BinariesDirectory)\tcltk_lib\tcl8
-
-  steps:
-  - template: ./checkout.yml
-
-  - task: DownloadPipelineArtifact at 1
-    displayName: 'Download artifact: bin_$(Name)'
-    inputs:
-      artifactName: bin_$(Name)
-      targetPath: $(Build.BinariesDirectory)\bin
-
-  - task: DownloadPipelineArtifact at 1
-    displayName: 'Download artifact: bin_$(Name)_d'
-    inputs:
-      artifactName: bin_$(Name)_d
-      targetPath: $(Build.BinariesDirectory)\bin
-
-  - task: DownloadPipelineArtifact at 1
-    displayName: 'Download artifact: tcltk_lib_$(Name)'
-    condition: and(succeeded(), variables['TclLibrary'])
-    inputs:
-      artifactName: tcltk_lib_$(Name)
-      targetPath: $(Build.BinariesDirectory)\tcltk_lib
-
-  - powershell: |
-      copy "$(Build.BinariesDirectory)\bin\Activate.ps1" Lib\venv\scripts\common\Activate.ps1 -Force
-    displayName: 'Copy signed files into sources'
-    condition: and(succeeded(), variables['SigningCertificate'])
-
-  - template: ./layout-command.yml
-
-  - powershell: |
-     Remove-Item "$(Build.ArtifactStagingDirectory)\appx-store" -Recurse -Force -EA 0
-      $(LayoutCmd) --copy "$(Build.ArtifactStagingDirectory)\appx-store" --preset-appx --precompile
-    displayName: 'Generate store APPX layout'
-    env:
-      TCL_LIBRARY: $(TclLibrary)
-
-  - task: PublishPipelineArtifact at 0
-    displayName: 'Publish Artifact: layout_appxstore_$(Name)'
-    inputs:
-      targetPath: '$(Build.ArtifactStagingDirectory)\appx-store'
-      artifactName: layout_appxstore_$(Name)
-
-  - task: DownloadPipelineArtifact at 1
-    displayName: 'Download artifact: cert'
-    condition: and(succeeded(), variables['SigningCertificate'])
-    inputs:
-      artifactName: cert
-      targetPath: $(Build.BinariesDirectory)\cert
-
-  - powershell: |
-      $info = (gc "$(Build.BinariesDirectory)\cert\certinfo.json" | ConvertFrom-JSON)
-      Write-Host "Side-loadable APPX must be signed with '$($info.Subject)'"
-      Write-Host "##vso[task.setvariable variable=APPX_DATA_PUBLISHER]$($info.Subject)"
-      Write-Host "##vso[task.setvariable variable=APPX_DATA_SHA256]$($info.SHA256)"
-    displayName: 'Override signing parameters'
-    condition: and(succeeded(), variables['SigningCertificate'])
-
-  - powershell: |
-      Remove-Item "$(Build.ArtifactStagingDirectory)\appx" -Recurse -Force -EA 0
-      $(LayoutCmd) --copy "$(Build.ArtifactStagingDirectory)\appx" --preset-appx --precompile --include-symbols --include-tests
-    displayName: 'Generate sideloading APPX layout'
-    env:
-      TCL_LIBRARY: $(TclLibrary)
-
-  - task: PublishPipelineArtifact at 0
-    displayName: 'Publish Artifact: layout_appx_$(Name)'
-    inputs:
-      targetPath: '$(Build.ArtifactStagingDirectory)\appx'
-      artifactName: layout_appx_$(Name)
diff --git a/.azure-pipelines/windows-release/stage-layout-nuget.yml b/.azure-pipelines/windows-release/stage-layout-nuget.yml
deleted file mode 100644
index b60a324dd90e3..0000000000000
--- a/.azure-pipelines/windows-release/stage-layout-nuget.yml
+++ /dev/null
@@ -1,52 +0,0 @@
-jobs:
-- job: Make_Nuget_Layout
-  displayName: Make Nuget layout
-  condition: and(succeeded(), eq(variables['DoNuget'], 'true'))
-
-  pool:
-    vmImage: windows-2022
-
-  workspace:
-    clean: all
-
-  strategy:
-    matrix:
-      win32:
-        Name: win32
-        Python: $(Build.BinariesDirectory)\bin\python.exe
-        PYTHONHOME: $(Build.SourcesDirectory)
-      amd64:
-        Name: amd64
-        Python: $(Build.BinariesDirectory)\bin\python.exe
-        PYTHONHOME: $(Build.SourcesDirectory)
-      arm64:
-        Name: arm64
-        HostArch: amd64
-        Python: $(Build.BinariesDirectory)\bin_amd64\python.exe
-        PYTHONHOME: $(Build.SourcesDirectory)
-
-  steps:
-  - template: ./checkout.yml
-
-  - task: DownloadPipelineArtifact at 1
-    displayName: 'Download artifact: bin_$(Name)'
-    inputs:
-      artifactName: bin_$(Name)
-      targetPath: $(Build.BinariesDirectory)\bin
-
-  - powershell: |
-      copy $(Build.BinariesDirectory)\bin\Activate.ps1 Lib\venv\scripts\common\Activate.ps1 -Force
-    displayName: 'Copy signed files into sources'
-    condition: and(succeeded(), variables['SigningCertificate'])
-
-  - template: ./layout-command.yml
-
-  - powershell: |
-      $(LayoutCmd) --copy "$(Build.ArtifactStagingDirectory)\nuget" --preset-nuget
-    displayName: 'Generate nuget layout'
-
-  - task: PublishPipelineArtifact at 0
-    displayName: 'Publish Artifact: layout_nuget_$(Name)'
-    inputs:
-      targetPath: '$(Build.ArtifactStagingDirectory)\nuget'
-      artifactName: layout_nuget_$(Name)
diff --git a/.azure-pipelines/windows-release/stage-msi.yml b/.azure-pipelines/windows-release/stage-msi.yml
deleted file mode 100644
index 0566544a6eb63..0000000000000
--- a/.azure-pipelines/windows-release/stage-msi.yml
+++ /dev/null
@@ -1,43 +0,0 @@
-parameters:
-  ARM64TclTk: true
-
-jobs:
-- job: Make_MSI
-  displayName: Make MSI
-  condition: and(succeeded(), not(variables['SigningCertificate']))
-
-  pool:
-    vmImage: windows-2022
-
-  variables:
-    ReleaseUri: http://www.python.org/{arch}
-    DownloadUrl: https://www.python.org/ftp/python/{version}/{arch}{releasename}/{msi}
-    Py_OutDir: $(Build.BinariesDirectory)
-
-  workspace:
-    clean: all
-
-  steps:
-  - template: msi-steps.yml
-    parameters:
-      ARM64TclTk: ${{ parameters.ARM64TclTk }}
-
-- job: Make_Signed_MSI
-  displayName: Make signed MSI
-  condition: and(succeeded(), variables['SigningCertificate'])
-
-  pool:
-    name: 'Windows Release'
-
-  variables:
-    ReleaseUri: http://www.python.org/{arch}
-    DownloadUrl: https://www.python.org/ftp/python/{version}/{arch}{releasename}/{msi}
-    Py_OutDir: $(Build.BinariesDirectory)
-
-  workspace:
-    clean: all
-
-  steps:
-  - template: msi-steps.yml
-    parameters:
-      ARM64TclTk: ${{ parameters.ARM64TclTk }}
diff --git a/.azure-pipelines/windows-release/stage-pack-msix.yml b/.azure-pipelines/windows-release/stage-pack-msix.yml
deleted file mode 100644
index 95988151a03db..0000000000000
--- a/.azure-pipelines/windows-release/stage-pack-msix.yml
+++ /dev/null
@@ -1,148 +0,0 @@
-jobs:
-- job: Pack_MSIX
-  displayName: Pack MSIX bundles
-
-  pool:
-    vmImage: windows-2022
-
-  workspace:
-    clean: all
-
-  strategy:
-    matrix:
-      amd64:
-        Name: amd64
-        Artifact: appx
-        Suffix:
-        ShouldSign: true
-      amd64_store:
-        Name: amd64
-        Artifact: appxstore
-        Suffix: -store
-        Upload: true
-      arm64:
-        Name: arm64
-        Artifact: appx
-        Suffix:
-        ShouldSign: true
-      arm64_store:
-        Name: arm64
-        Artifact: appxstore
-        Suffix: -store
-        Upload: true
-
-  steps:
-  - template: ./checkout.yml
-
-  - task: DownloadPipelineArtifact at 1
-    displayName: 'Download artifact: layout_$(Artifact)_$(Name)'
-    inputs:
-      artifactName: layout_$(Artifact)_$(Name)
-      targetPath: $(Build.BinariesDirectory)\layout
-
-  - task: DownloadBuildArtifacts at 0
-    displayName: 'Download artifact: symbols'
-    inputs:
-      artifactName: symbols
-      downloadPath: $(Build.BinariesDirectory)
-
-  - powershell: |
-      $d = (.\PCbuild\build.bat -V) | %{ if($_ -match '\s+(\w+):\s*(.+)\s*$') { @{$Matches[1] = $Matches[2];} }};
-      Write-Host "##vso[task.setvariable variable=VersionText]$($d.PythonVersion)"
-      Write-Host "##vso[task.setvariable variable=VersionNumber]$($d.PythonVersionNumber)"
-      Write-Host "##vso[task.setvariable variable=VersionHex]$($d.PythonVersionHex)"
-      Write-Host "##vso[task.setvariable variable=VersionUnique]$($d.PythonVersionUnique)"
-      Write-Host "##vso[task.setvariable variable=Filename]python-$($d.PythonVersion)-$(Name)$(Suffix)"
-    displayName: 'Extract version numbers'
-
-  - powershell: |
-      ./Tools/msi/make_appx.ps1 -layout "$(Build.BinariesDirectory)\layout" -msix "$(Build.ArtifactStagingDirectory)\msix\$(Filename).msix"
-    displayName: 'Build msix'
-
-  - powershell: |
-      7z a -tzip "$(Build.ArtifactStagingDirectory)\msix\$(Filename).appxsym" *.pdb
-    displayName: 'Build appxsym'
-    workingDirectory: $(Build.BinariesDirectory)\symbols\$(Name)
-
-  - task: PublishBuildArtifacts at 1
-    displayName: 'Publish Artifact: MSIX'
-    condition: and(succeeded(), or(ne(variables['ShouldSign'], 'true'), not(variables['SigningCertificate'])))
-    inputs:
-      PathtoPublish: '$(Build.ArtifactStagingDirectory)\msix'
-      ArtifactName: msix
-
-  - task: PublishBuildArtifacts at 1
-    displayName: 'Publish Artifact: MSIX'
-    condition: and(succeeded(), and(eq(variables['ShouldSign'], 'true'), variables['SigningCertificate']))
-    inputs:
-      PathtoPublish: '$(Build.ArtifactStagingDirectory)\msix'
-      ArtifactName: unsigned_msix
-
-  - powershell: |
-      7z a -tzip "$(Build.ArtifactStagingDirectory)\msixupload\$(Filename).msixupload" *
-    displayName: 'Build msixupload'
-    condition: and(succeeded(), eq(variables['Upload'], 'true'))
-    workingDirectory: $(Build.ArtifactStagingDirectory)\msix
-
-  - task: PublishBuildArtifacts at 1
-    displayName: 'Publish Artifact: MSIXUpload'
-    condition: and(succeeded(), eq(variables['Upload'], 'true'))
-    inputs:
-      PathtoPublish: '$(Build.ArtifactStagingDirectory)\msixupload'
-      ArtifactName: msixupload
-
-
-- job: Sign_MSIX
-  displayName: Sign side-loadable MSIX bundles
-  dependsOn:
-  - Pack_MSIX
-  condition: and(succeeded(), variables['SigningCertificate'])
-
-  pool:
-    name: 'Windows Release'
-
-  workspace:
-    clean: all
-
-  steps:
-  - template: ./checkout.yml
-  - template: ./find-sdk.yml
-
-  - powershell: |
-      $d = (.\PCbuild\build.bat -V) | %{ if($_ -match '\s+(\w+):\s*(.+)\s*$') { @{$Matches[1] = $Matches[2];} }};
-      Write-Host "##vso[task.setvariable variable=SigningDescription]Python $($d.PythonVersion)"
-    displayName: 'Update signing description'
-    condition: and(succeeded(), not(variables['SigningDescription']))
-
-  - task: DownloadBuildArtifacts at 0
-    displayName: 'Download Artifact: unsigned_msix'
-    inputs:
-      artifactName: unsigned_msix
-      downloadPath: $(Build.BinariesDirectory)
-
-  # MSIX must be signed and timestamped simultaneously
-  #
-  # Getting "Error: SignerSign() failed." (-2147024885/0x8007000b)"?
-  # It may be that the certificate info collected in stage-sign.yml is wrong. Check that
-  # you do not have multiple matches for the certificate name you have specified.
-  - powershell: |
-      $failed = $true
-      foreach ($retry in 1..3) {
-          signtool sign /a /n "$(SigningCertificate)" /fd sha256 /tr http://timestamp.digicert.com/ /td sha256 /d "$(SigningDescription)" (gi *.msix)
-          if ($?) {
-              $failed = $false
-              break
-          }
-          sleep 1
-      }
-      if ($failed) {
-          throw "Failed to sign MSIX"
-      }
-    displayName: 'Sign MSIX'
-    workingDirectory: $(Build.BinariesDirectory)\unsigned_msix
-
-  - task: PublishBuildArtifacts at 1
-    displayName: 'Publish Artifact: MSIX'
-    inputs:
-      PathtoPublish: '$(Build.BinariesDirectory)\unsigned_msix'
-      ArtifactName: msix
diff --git a/.azure-pipelines/windows-release/stage-pack-nuget.yml b/.azure-pipelines/windows-release/stage-pack-nuget.yml
deleted file mode 100644
index 85b44e389ab5d..0000000000000
--- a/.azure-pipelines/windows-release/stage-pack-nuget.yml
+++ /dev/null
@@ -1,66 +0,0 @@
-jobs:
-- job: Pack_Nuget
-  displayName: Pack Nuget bundles
-  condition: and(succeeded(), eq(variables['DoNuget'], 'true'))
-
-  pool:
-    name: 'Windows Release'
-
-  workspace:
-    clean: all
-
-  strategy:
-    matrix:
-      amd64:
-        Name: amd64
-      win32:
-        Name: win32
-      arm64:
-        Name: arm64
-
-  steps:
-  - checkout: none
-
-  - task: DownloadPipelineArtifact at 1
-    displayName: 'Download artifact: layout_nuget_$(Name)'
-    inputs:
-      artifactName: layout_nuget_$(Name)
-      targetPath: $(Build.BinariesDirectory)\layout
-
-  - task: NugetToolInstaller at 0
-    displayName: 'Install Nuget'
-    inputs:
-      versionSpec: '>=5.0'
-
-  - powershell: >
-      nuget pack
-      "$(Build.BinariesDirectory)\layout\python.nuspec"
-      -OutputDirectory $(Build.ArtifactStagingDirectory)
-      -NoPackageAnalysis
-      -NonInteractive
-    condition: and(succeeded(), not(variables['OverrideNugetVersion']))
-    displayName: 'Create nuget package'
-
-  - powershell: >
-      nuget pack
-      "$(Build.BinariesDirectory)\layout\python.nuspec"
-      -OutputDirectory $(Build.ArtifactStagingDirectory)
-      -NoPackageAnalysis
-      -NonInteractive
-      -Version "$(OverrideNugetVersion)"
-    condition: and(succeeded(), variables['OverrideNugetVersion'])
-    displayName: 'Create nuget package'
-
-  - powershell: |
-      gci *.nupkg | %{
-        nuget sign "$_" -CertificateSubjectName "$(SigningCertificate)" -Timestamper http://timestamp.digicert.com/ -Overwrite
-      }
-    displayName: 'Sign nuget package'
-    workingDirectory: $(Build.ArtifactStagingDirectory)
-    condition: and(succeeded(), variables['SigningCertificate'])
-
-  - task: PublishBuildArtifacts at 1
-    displayName: 'Publish Artifact: nuget'
-    inputs:
-      PathtoPublish: '$(Build.ArtifactStagingDirectory)'
-      ArtifactName: nuget
diff --git a/.azure-pipelines/windows-release/stage-publish-nugetorg.yml b/.azure-pipelines/windows-release/stage-publish-nugetorg.yml
deleted file mode 100644
index abb9d0f0fd485..0000000000000
--- a/.azure-pipelines/windows-release/stage-publish-nugetorg.yml
+++ /dev/null
@@ -1,50 +0,0 @@
-parameters:
-  BuildToPublish: ''
-
-jobs:
-- job: Publish_Nuget
-  displayName: Publish Nuget packages
-  condition: and(succeeded(), eq(variables['DoNuget'], 'true'), ne(variables['SkipNugetPublish'], 'true'))
-
-  pool:
-    vmImage: windows-2022
-
-  workspace:
-    clean: all
-
-  steps:
-  - checkout: none
-
-  - ${{ if parameters.BuildToPublish }}:
-    - task: DownloadBuildArtifacts at 0
-      displayName: 'Download artifact from ${{ parameters.BuildToPublish }}'
-      inputs:
-        artifactName: nuget
-        downloadPath: $(Build.BinariesDirectory)
-        buildType: specific
-        project: $(System.TeamProject)
-        pipeline: $(Build.DefinitionName)
-        buildVersionToDownload: specific
-        buildId: ${{ parameters.BuildToPublish }}
-
-  - ${{ else }}:
-    - task: DownloadBuildArtifacts at 0
-      displayName: 'Download artifact: nuget'
-      inputs:
-        artifactName: nuget
-        downloadPath: $(Build.BinariesDirectory)
-
-
-  - powershell: 'gci pythonarm*.nupkg | %{ Write-Host "Not publishing: $($_.Name)"; gi $_ } | del'
-    displayName: 'Prevent publishing ARM64 packages'
-    workingDirectory: '$(Build.BinariesDirectory)\nuget'
-    condition: and(succeeded(), ne(variables['PublishARM64'], 'true'))
-
-  - task: NuGetCommand at 2
-    displayName: Push packages
-    condition: and(succeeded(), eq(variables['SigningCertificate'], variables['__RealSigningCertificate']))
-    inputs:
-      command: push
-      packagesToPush: '$(Build.BinariesDirectory)\nuget\*.nupkg'
-      nuGetFeedType: external
-      publishFeedCredentials: 'Python on Nuget'
diff --git a/.azure-pipelines/windows-release/stage-publish-pythonorg.yml b/.azure-pipelines/windows-release/stage-publish-pythonorg.yml
deleted file mode 100644
index 084134e009902..0000000000000
--- a/.azure-pipelines/windows-release/stage-publish-pythonorg.yml
+++ /dev/null
@@ -1,192 +0,0 @@
-parameters:
-  BuildToPublish: ''
-
-jobs:
-- job: Publish_Python
-  displayName: Publish python.org packages
-  condition: and(succeeded(), eq(variables['DoMSI'], 'true'), eq(variables['DoEmbed'], 'true'), ne(variables['SkipPythonOrgPublish'], 'true'))
-
-  pool:
-    #vmImage: windows-2022
-    name: 'Windows Release'
-
-  workspace:
-    clean: all
-
-  steps:
-  - template: ./checkout.yml
-
-  - task: UsePythonVersion at 0
-    displayName: 'Use Python 3.6 or later'
-    inputs:
-      versionSpec: '>=3.6'
-
-  - ${{ if parameters.BuildToPublish }}:
-    - task: DownloadPipelineArtifact at 1
-      displayName: 'Download artifact from ${{ parameters.BuildToPublish }}: Doc'
-      inputs:
-        artifactName: Doc
-        targetPath: $(Build.BinariesDirectory)\Doc
-        buildType: specific
-        project: $(System.TeamProject)
-        pipeline: $(Build.DefinitionName)
-        buildVersionToDownload: specific
-        buildId: ${{ parameters.BuildToPublish }}
-
-    - task: DownloadPipelineArtifact at 1
-      displayName: 'Download artifact from ${{ parameters.BuildToPublish }}: msi'
-      inputs:
-        artifactName: msi
-        targetPath: $(Build.BinariesDirectory)\msi
-        buildType: specific
-        project: $(System.TeamProject)
-        pipeline: $(Build.DefinitionName)
-        buildVersionToDownload: specific
-        buildId: ${{ parameters.BuildToPublish }}
-
-    # Note that embed is a 'build' artifact, not a 'pipeline' artifact
-    - task: DownloadBuildArtifacts at 0
-      displayName: 'Download artifact from ${{ parameters.BuildToPublish }}: embed'
-      inputs:
-        artifactName: embed
-        downloadPath: $(Build.BinariesDirectory)
-        buildType: specific
-        project: $(System.TeamProject)
-        pipeline: $(Build.DefinitionName)
-        buildVersionToDownload: specific
-        buildId: ${{ parameters.BuildToPublish }}
-
-  - ${{ else }}:
-    - task: DownloadPipelineArtifact at 1
-      displayName: 'Download artifact: Doc'
-      inputs:
-        artifactName: Doc
-        targetPath: $(Build.BinariesDirectory)\Doc
-
-    - task: DownloadPipelineArtifact at 1
-      displayName: 'Download artifact: msi'
-      inputs:
-        artifactName: msi
-        targetPath: $(Build.BinariesDirectory)\msi
-
-    # Note that embed is a 'build' artifact, not a 'pipeline' artifact
-    - task: DownloadBuildArtifacts at 0
-      displayName: 'Download artifact: embed'
-      inputs:
-        artifactName: embed
-        downloadPath: $(Build.BinariesDirectory)
-
-
-  # Note that ARM64 MSIs are skipped at build when this option is specified
-  - powershell: 'gci *embed-arm*.zip | %{ Write-Host "Not publishing: $($_.Name)"; gi $_ } | del'
-    displayName: 'Prevent publishing ARM64 packages'
-    workingDirectory: '$(Build.BinariesDirectory)\embed'
-    condition: and(succeeded(), ne(variables['PublishARM64'], 'true'))
-
-
-  - task: DownloadSecureFile at 1
-    name: gpgkey
-    inputs:
-      secureFile: 'python-signing.key'
-    displayName: 'Download GPG key'
-
-  - powershell: |
-      git clone https://github.com/python/cpython-bin-deps --branch gpg --single-branch --depth 1 --progress -v "gpg"
-      gpg/gpg2.exe --import "$(gpgkey.secureFilePath)"
-      $files = gci -File "msi\*\*", "embed\*.zip"
-      if ("$(DoCHM)" -ieq "true") {
-          $files = $files + (gci -File "doc\htmlhelp\*.chm")
-      }
-      $files.FullName | %{
-          gpg/gpg2.exe -ba --batch --passphrase $(GPGPassphrase) $_
-          "Made signature for $_"
-      }
-    displayName: 'Generate GPG signatures'
-    workingDirectory: $(Build.BinariesDirectory)
-
-  - powershell: |
-      $p = gps "gpg-agent" -EA 0
-      if ($p) { $p.Kill() }
-    displayName: 'Kill GPG agent'
-    condition: true
-
-
-  - powershell: >
-      $(Build.SourcesDirectory)\Tools\msi\uploadrelease.ps1
-      -build msi
-      -user $(PyDotOrgUsername)
-      -server $(PyDotOrgServer)
-      -doc_htmlhelp doc\htmlhelp
-      -embed embed
-      -skippurge
-      -skiptest
-      -skiphash
-    condition: and(succeeded(), eq(variables['SigningCertificate'], variables['__RealSigningCertificate']))
-    workingDirectory: $(Build.BinariesDirectory)
-    displayName: 'Upload files to python.org'
-
-  - powershell: >
-      python
-      "$(Build.SourcesDirectory)\Tools\msi\purge.py"
-      (gci msi\*\python-*.exe | %{ $_.Name -replace 'python-(.+?)(-|\.exe).+', '$1' } | select -First 1)
-    workingDirectory: $(Build.BinariesDirectory)
-    condition: and(succeeded(), eq(variables['SigningCertificate'], variables['__RealSigningCertificate']))
-    displayName: 'Purge CDN'
-
-  - powershell: |
-      $failures = 0
-      gci "msi\*\*.exe" -File | %{
-          $d = mkdir "tests\$($_.BaseName)" -Force
-          gci $d -r -File | del
-          $ic = copy $_ $d -PassThru
-          "Checking layout for $($ic.Name)"
-          Start-Process -wait $ic "/passive", "/layout", "$d\layout", "/log", "$d\log\install.log"
-          if (-not $?) {
-              Write-Error "Failed to validate layout of $($inst.Name)"
-              $failures += 1
-          }
-      }
-      if ($failures) {
-        Write-Error "Failed to validate $failures installers"
-        exit 1
-      }
-    condition: and(succeeded(), eq(variables['SigningCertificate'], variables['__RealSigningCertificate']))
-    workingDirectory: $(Build.BinariesDirectory)
-    displayName: 'Test layouts'
-
-  - powershell: |
-      $files = gci -File "msi\*\*.exe", "embed\*.zip"
-      if ("$(DoCHM)" -ieq "true") {
-          $files = $files + (gci -File "doc\htmlhelp\python*.chm")
-      }
-      $hashes = $files  | `
-          Sort-Object Name | `
-          Format-Table Name, @{
-            Label="MD5";
-            Expression={(Get-FileHash $_ -Algorithm MD5).Hash}
-          }, Length -AutoSize | `
-          Out-String -Width 4096
-      $d = mkdir "$(Build.ArtifactStagingDirectory)\hashes" -Force
-      $hashes | Out-File "$d\hashes.txt" -Encoding ascii
-      $hashes
-    workingDirectory: $(Build.BinariesDirectory)
-    displayName: 'Generate hashes'
-
-  - powershell: |
-      "Copying:"
-      $files = gci -File "msi\*\python*.asc", "embed\*.asc"
-      if ("$(DoCHM)" -ieq "true") {
-          $files = $files + (gci -File "doc\htmlhelp\*.asc")
-      }
-      $files.FullName
-      $d = mkdir "$(Build.ArtifactStagingDirectory)\hashes" -Force
-      move $files $d -Force
-      gci msi -Directory | %{ move "msi\$_\*.asc" (mkdir "$d\$_" -Force) }
-    workingDirectory: $(Build.BinariesDirectory)
-    displayName: 'Copy GPG signatures for build'
-
-  - task: PublishPipelineArtifact at 0
-    displayName: 'Publish Artifact: hashes'
-    inputs:
-      targetPath: '$(Build.ArtifactStagingDirectory)\hashes'
-      artifactName: hashes
diff --git a/.azure-pipelines/windows-release/stage-publish-store.yml b/.azure-pipelines/windows-release/stage-publish-store.yml
deleted file mode 100644
index 0eae21edaa7f8..0000000000000
--- a/.azure-pipelines/windows-release/stage-publish-store.yml
+++ /dev/null
@@ -1,38 +0,0 @@
-parameters:
-  BuildToPublish: ''
-
-jobs:
-- job: Publish_Store
-  displayName: Publish Store packages
-  condition: and(succeeded(), eq(variables['DoMSIX'], 'true'), ne(variables['SkipMSIXPublish'], 'true'))
-
-  pool:
-    vmImage: windows-2022
-
-  workspace:
-    clean: all
-
-  steps:
-  - checkout: none
-
-  - ${{ if parameters.BuildToPublish }}:
-    - task: DownloadBuildArtifacts at 0
-      displayName: 'Download artifact: msixupload'
-      inputs:
-        artifactName: msixupload
-        downloadPath: $(Build.BinariesDirectory)
-        buildType: specific
-        project: cpython
-        pipeline: Windows-Release
-        buildVersionToDownload: specific
-        buildId: ${{ parameters.BuildToPublish }}
-
-  - ${{ else }}:
-    - task: DownloadBuildArtifacts at 0
-      displayName: 'Download artifact: msixupload'
-      inputs:
-        artifactName: msixupload
-        downloadPath: $(Build.BinariesDirectory)
-
-  # TODO: eq(variables['SigningCertificate'], variables['__RealSigningCertificate'])
-  # If we are not real-signed, DO NOT PUBLISH
diff --git a/.azure-pipelines/windows-release/stage-sign.yml b/.azure-pipelines/windows-release/stage-sign.yml
deleted file mode 100644
index 4481aa86edc2c..0000000000000
--- a/.azure-pipelines/windows-release/stage-sign.yml
+++ /dev/null
@@ -1,130 +0,0 @@
-parameters:
-  Include: '*.exe, *.dll, *.pyd, *.cat, *.ps1'
-  Exclude: 'vcruntime*, libffi*, libcrypto*, libssl*'
-
-jobs:
-- job: Sign_Python
-  displayName: Sign Python binaries
-  condition: and(succeeded(), variables['SigningCertificate'])
-
-  pool:
-    name: 'Windows Release'
-
-  workspace:
-    clean: all
-
-  strategy:
-    matrix:
-      win32:
-        Name: win32
-      amd64:
-        Name: amd64
-      arm64:
-        Name: arm64
-
-  steps:
-  - template: ./checkout.yml
-  - template: ./find-sdk.yml
-
-  - powershell: |
-      $d = (.\PCbuild\build.bat -V) | %{ if($_ -match '\s+(\w+):\s*(.+)\s*$') { @{$Matches[1] = $Matches[2];} }};
-      Write-Host "##vso[task.setvariable variable=SigningDescription]Python $($d.PythonVersion)"
-    displayName: 'Update signing description'
-    condition: and(succeeded(), not(variables['SigningDescription']))
-
-  - powershell: |
-      Write-Host "##vso[build.addbuildtag]signed"
-    displayName: 'Add build tags'
-
-  - task: DownloadPipelineArtifact at 1
-    displayName: 'Download artifact: unsigned_bin_$(Name)'
-    inputs:
-      artifactName: unsigned_bin_$(Name)
-      targetPath: $(Build.BinariesDirectory)\bin
-
-  - powershell: |
-      copy "$(Build.SourcesDirectory)\Lib\venv\scripts\common\Activate.ps1" .
-    displayName: 'Copy files from source'
-    workingDirectory: $(Build.BinariesDirectory)\bin
-
-  - powershell: |
-      $files = (gi ${{ parameters.Include }} -Exclude ${{ parameters.Exclude }})
-      signtool sign /a /n "$(SigningCertificate)" /fd sha256 /d "$(SigningDescription)" $files
-    displayName: 'Sign binaries'
-    workingDirectory: $(Build.BinariesDirectory)\bin
-
-  - powershell: |
-      $files = (gi ${{ parameters.Include }} -Exclude ${{ parameters.Exclude }})
-      $failed = $true
-      foreach ($retry in 1..10) {
-          signtool timestamp /tr http://timestamp.digicert.com/ /td sha256 $files
-          if ($?) {
-              $failed = $false
-              break
-          }
-          sleep 5
-      }
-      if ($failed) {
-          Write-Host "##vso[task.logissue type=error]Failed to timestamp files"
-      }
-    displayName: 'Timestamp binaries'
-    workingDirectory: $(Build.BinariesDirectory)\bin
-    continueOnError: true
-
-  - task: PublishPipelineArtifact at 0
-    displayName: 'Publish artifact: bin_$(Name)'
-    inputs:
-      targetPath: '$(Build.BinariesDirectory)\bin'
-      artifactName: bin_$(Name)
-
-
-- job: Dump_CertInfo
-  displayName: Capture certificate info
-  condition: and(succeeded(), variables['SigningCertificate'])
-
-  pool:
-    name: 'Windows Release'
-
-  steps:
-  - checkout: none
-
-  - powershell: |
-      $m = 'CN=$(SigningCertificate)'
-      $c = ((gci Cert:\CurrentUser\My), (gci Cert:\LocalMachine\My)) | %{ $_ } | `
-         ?{ $_.Subject -match $m -and $_.NotBefore -lt (Get-Date) -and $_.NotAfter -gt (Get-Date) } | `
-         select -First 1
-      if (-not $c) {
-          Write-Host "Failed to find certificate for $(SigningCertificate)"
-          exit
-      }
-      $d = mkdir "$(Build.BinariesDirectory)\tmp" -Force
-      $cf = "$d\cert.cer"
-      [IO.File]::WriteAllBytes($cf, $c.Export("Cer"))
-      $csha = (certutil -dump $cf | sls "Cert Hash\(sha256\): (.+)").Matches.Groups[1].Value
-
-      $info = @{ Subject=$c.Subject; SHA256=$csha; }
-
-      $d = mkdir "$(Build.BinariesDirectory)\cert" -Force
-      $info | ConvertTo-JSON -Compress | Out-File -Encoding utf8 "$d\certinfo.json"
-    displayName: "Extract certificate info"
-
-  - task: PublishPipelineArtifact at 0
-    displayName: 'Publish artifact: cert'
-    inputs:
-      targetPath: '$(Build.BinariesDirectory)\cert'
-      artifactName: cert
-
-
-- job: Mark_Unsigned
-  displayName: Tag unsigned build
-  condition: and(succeeded(), not(variables['SigningCertificate']))
-
-  pool:
-    vmImage: windows-2022
-
-  steps:
-  - checkout: none
-
-  - powershell: |
-      Write-Host "##vso[build.addbuildtag]unsigned"
-    displayName: 'Add build tag'
diff --git a/.azure-pipelines/windows-release/stage-test-embed.yml b/.azure-pipelines/windows-release/stage-test-embed.yml
deleted file mode 100644
index 252db959930f2..0000000000000
--- a/.azure-pipelines/windows-release/stage-test-embed.yml
+++ /dev/null
@@ -1,41 +0,0 @@
-jobs:
-- job: Test_Embed
-  displayName: Test Embed
-  condition: and(succeeded(), eq(variables['DoEmbed'], 'true'))
-
-  pool:
-    vmImage: windows-2022
-
-  workspace:
-    clean: all
-
-  strategy:
-    matrix:
-      win32:
-        Name: win32
-      amd64:
-        Name: amd64
-
-  steps:
-  - checkout: none
-
-  - task: DownloadBuildArtifacts at 0
-    displayName: 'Download artifact: embed'
-    inputs:
-      artifactName: embed
-      downloadPath: $(Build.BinariesDirectory)
-
-  - powershell: |
-      $p = gi "$(Build.BinariesDirectory)\embed\python*embed-$(Name).zip"
-      Expand-Archive -Path $p -DestinationPath "$(Build.BinariesDirectory)\Python"
-      $p = gi "$(Build.BinariesDirectory)\Python\python.exe"
-      Write-Host "##vso[task.prependpath]$(Split-Path -Parent $p)"
-    displayName: 'Install Python and add to PATH'
-
-  - script: |
-      python -c "import sys; print(sys.version)"
-    displayName: 'Collect version number'
-
-  - script: |
-      python -m site
-    displayName: 'Collect site'
diff --git a/.azure-pipelines/windows-release/stage-test-msi.yml b/.azure-pipelines/windows-release/stage-test-msi.yml
deleted file mode 100644
index a471d05bc6a4a..0000000000000
--- a/.azure-pipelines/windows-release/stage-test-msi.yml
+++ /dev/null
@@ -1,108 +0,0 @@
-jobs:
-- job: Test_MSI
-  displayName: Test MSI
-
-  pool:
-    vmImage: windows-2022
-
-  workspace:
-    clean: all
-
-  strategy:
-    matrix:
-      win32_User:
-        ExeMatch: 'python-[\dabrc.]+\.exe'
-        Logs: $(Build.ArtifactStagingDirectory)\logs\win32_User
-        InstallAllUsers: 0
-      win32_Machine:
-        ExeMatch: 'python-[\dabrc.]+\.exe'
-        Logs: $(Build.ArtifactStagingDirectory)\logs\win32_Machine
-        InstallAllUsers: 1
-      amd64_User:
-        ExeMatch: 'python-[\dabrc.]+-amd64\.exe'
-        Logs: $(Build.ArtifactStagingDirectory)\logs\amd64_User
-        InstallAllUsers: 0
-      amd64_Machine:
-        ExeMatch: 'python-[\dabrc.]+-amd64\.exe'
-        Logs: $(Build.ArtifactStagingDirectory)\logs\amd64_Machine
-        InstallAllUsers: 1
-
-  steps:
-  - checkout: none
-
-  - task: DownloadPipelineArtifact at 1
-    displayName: 'Download artifact: msi'
-    inputs:
-      artifactName: msi
-      targetPath: $(Build.BinariesDirectory)\msi
-
-  - powershell: |
-      $p = (gci -r *.exe | ?{ $_.Name -match '$(ExeMatch)' } | select -First 1)
-      Write-Host "##vso[task.setvariable variable=SetupExe]$($p.FullName)"
-      Write-Host "##vso[task.setvariable variable=SetupExeName]$($p.Name)"
-    displayName: 'Find installer executable'
-    workingDirectory: $(Build.BinariesDirectory)\msi
-
-  - script: >
-      "$(SetupExe)"
-      /passive
-      /log "$(Logs)\install\log.txt"
-      TargetDir="$(Build.BinariesDirectory)\Python"
-      Include_debug=1
-      Include_symbols=1
-      InstallAllUsers=$(InstallAllUsers)
-    displayName: 'Install Python'
-
-  - powershell: |
-      $p = gi "$(Build.BinariesDirectory)\Python\python.exe"
-      Write-Host "##vso[task.prependpath]$(Split-Path -Parent $p)"
-    displayName: 'Add test Python to PATH'
-
-  - script: |
-      python -c "import sys; print(sys.version)"
-    displayName: 'Collect version number'
-
-  - script: |
-      python -m site
-    displayName: 'Collect site'
-
-  - powershell: |
-      gci -r "${env:PROGRAMDATA}\Microsoft\Windows\Start Menu\Programs\Python*"
-    displayName: 'Capture per-machine Start Menu items'
-  - powershell: |
-      gci -r "${env:APPDATA}\Microsoft\Windows\Start Menu\Programs\Python*"
-    displayName: 'Capture per-user Start Menu items'
-
-  - powershell: |
-      gci -r "HKLM:\Software\WOW6432Node\Python"
-    displayName: 'Capture per-machine 32-bit registry'
-  - powershell: |
-      gci -r "HKLM:\Software\Python"
-    displayName: 'Capture per-machine native registry'
-  - powershell: |
-      gci -r "HKCU:\Software\Python"
-    displayName: 'Capture current-user registry'
-
-  - script: |
-      python -m pip install "azure<0.10"
-      python -m pip uninstall -y azure python-dateutil six
-    displayName: 'Test (un)install package'
-
-  - script: |
-      python -m test -uall -v test_ttk_guionly test_tk test_idle
-    displayName: 'Test Tkinter and Idle'
-
-  - script: >
-      "$(SetupExe)"
-      /passive
-      /uninstall
-      /log "$(Logs)\uninstall\log.txt"
-    displayName: 'Uninstall Python'
-
-  - task: PublishBuildArtifacts at 1
-    displayName: 'Publish Artifact: logs'
-    condition: true
-    continueOnError: true
-    inputs:
-      PathtoPublish: '$(Build.ArtifactStagingDirectory)\logs'
-      ArtifactName: msi_testlogs
diff --git a/.azure-pipelines/windows-release/stage-test-nuget.yml b/.azure-pipelines/windows-release/stage-test-nuget.yml
deleted file mode 100644
index c500baf29b457..0000000000000
--- a/.azure-pipelines/windows-release/stage-test-nuget.yml
+++ /dev/null
@@ -1,58 +0,0 @@
-jobs:
-- job: Test_Nuget
-  displayName: Test Nuget
-  condition: and(succeeded(), eq(variables['DoNuget'], 'true'))
-
-  pool:
-    vmImage: windows-2022
-
-  workspace:
-    clean: all
-
-  strategy:
-    matrix:
-      win32:
-        Package: pythonx86
-      amd64:
-        Package: python
-
-  steps:
-  - checkout: none
-
-  - task: DownloadBuildArtifacts at 0
-    displayName: 'Download artifact: nuget'
-    inputs:
-      artifactName: nuget
-      downloadPath: $(Build.BinariesDirectory)
-
-  - task: NugetToolInstaller at 0
-    inputs:
-      versionSpec: '>= 5'
-
-  - powershell: >
-      nuget install
-      $(Package)
-      -Source "$(Build.BinariesDirectory)\nuget"
-      -OutputDirectory "$(Build.BinariesDirectory)\install"
-      -Prerelease
-      -ExcludeVersion
-      -NonInteractive
-    displayName: 'Install Python'
-
-  - powershell: |
-      $p = gi "$(Build.BinariesDirectory)\install\$(Package)\tools\python.exe"
-      Write-Host "##vso[task.prependpath]$(Split-Path -Parent $p)"
-    displayName: 'Add test Python to PATH'
-
-  - script: |
-      python -c "import sys; print(sys.version)"
-    displayName: 'Collect version number'
-
-  - script: |
-      python -m site
-    displayName: 'Collect site'
-
-  - script: |
-      python -m pip install "azure<0.10"
-      python -m pip uninstall -y azure python-dateutil six
-    displayName: 'Test (un)install package'



More information about the Python-checkins mailing list