Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions windows-release/azure-pipelines.yml
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,10 @@ parameters:
displayName: "Signature description"
type: string
default: 'Built: $(Build.BuildNumber)'
- name: DoFreethreaded
displayName: "Include free-threaded builds (3.13 and later)"
type: boolean
default: true
- name: DoARM64
displayName: "Publish ARM64 build (3.11 and later)"
type: boolean
Expand Down Expand Up @@ -106,6 +110,7 @@ variables:
${{ else }}:
IsRealSigned: false
DoCHM: ${{ parameters.DoCHM }}
DoFreethreaded: ${{ parameters.DoFreethreaded }}
DoLayout: ${{ parameters.DoLayout }}
DoMSIX: ${{ parameters.DoMSIX }}
DoNuget: ${{ parameters.DoNuget }}
Expand All @@ -128,6 +133,7 @@ stages:
- template: stage-build.yml
parameters:
ARM64TclTk: ${{ parameters.ARM64TclTk }}
DoFreethreaded: ${{ parameters.DoFreethreaded }}
DoPGO: ${{ parameters.DoPGO }}
DoPGOARM64: ${{ parameters.DoPGOARM64 }}

Expand All @@ -147,8 +153,11 @@ stages:
- template: stage-layout-full.yml
parameters:
ARM64TclTk: ${{ parameters.ARM64TclTk }}
DoFreethreaded: ${{ parameters.DoFreethreaded }}
- template: stage-layout-embed.yml
- template: stage-layout-nuget.yml
parameters:
DoFreethreaded: ${{ parameters.DoFreethreaded }}

- stage: Pack
dependsOn: Layout
Expand All @@ -157,12 +166,15 @@ stages:
parameters:
${{ if and(parameters.SigningCertificate, ne(parameters.SigningCertificate, 'Unsigned')) }}:
SigningCertificate: ${{ parameters.SigningCertificate }}
DoFreethreaded: ${{ parameters.DoFreethreaded }}

- stage: Test
dependsOn: Pack
jobs:
- template: stage-test-embed.yml
- template: stage-test-nuget.yml
parameters:
DoFreethreaded: ${{ parameters.DoFreethreaded }}

- ${{ if eq(parameters.DoMSIX, 'true') }}:
- stage: Layout_MSIX
Expand Down Expand Up @@ -192,12 +204,15 @@ stages:
ARM64TclTk: ${{ parameters.ARM64TclTk }}
${{ if and(parameters.SigningCertificate, ne(parameters.SigningCertificate, 'Unsigned')) }}:
SigningCertificate: ${{ parameters.SigningCertificate }}
DoFreethreaded: ${{ parameters.DoFreethreaded }}

- stage: Test_MSI
displayName: Test MSI installer
dependsOn: Build_MSI
jobs:
- template: stage-test-msi.yml
parameters:
DoFreethreaded: ${{ parameters.DoFreethreaded }}

- ${{ if eq(parameters.DoPublish, 'true') }}:
- ${{ if eq(parameters.DoMSI, 'true') }}:
Expand Down
29 changes: 29 additions & 0 deletions windows-release/build-steps-pgo.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ parameters:
PGInstrument: false
PGRun: false
PGUpdate: false
DoFreethreaded: false

steps:
- template: ./checkout.yml
Expand All @@ -28,6 +29,15 @@ steps:
IncludeUwp: true
Py_OutDir: '$(Build.BinariesDirectory)\bin'

- ${{ if eq(parameters.DoFreethreaded, 'true') }}:
- powershell: |
$env:SigningCertificate = $null
.\PCbuild\build.bat -v -p $(Platform) -c PGInstrument --disable-gil
displayName: 'Run free-threaded build'
env:
IncludeUwp: true
Py_OutDir: '$(Build.BinariesDirectory)\bin'

- ${{ if ne(parameters.PGRun, 'true') }}:
# Not running in this job, so we publish our entire build and object files

Expand Down Expand Up @@ -66,6 +76,16 @@ steps:
env:
PYTHONHOME: '$(Build.SourcesDirectory)'

- ${{ if eq(parameters.DoFreethreaded, 'true') }}:
- powershell: |
$exe = (gci "$(Build.BinariesDirectory)\bin\$(Arch)\instrumented\python3*t.exe" | select -First 1)
& $exe -m test --pgo
ignoreLASTEXITCODE: true
displayName: 'Collect free-threaded profile'
env:
PYTHONHOME: '$(Build.SourcesDirectory)'


- ${{ if ne(parameters.PGUpdate, 'true') }}:
# Not finishing in this job, so publish the binaries
- task: PublishPipelineArtifact@0
Expand Down Expand Up @@ -107,6 +127,15 @@ steps:
IncludeUwp: true
Py_OutDir: '$(Build.BinariesDirectory)\bin'

- ${{ if eq(parameters.DoFreethreaded, 'true') }}:
- powershell: |
$env:SigningCertificate = $null
.\PCbuild\build.bat -v -p $(Platform) -c PGUpdate --disable-gil
displayName: 'Run free-threaded 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)
Expand Down
25 changes: 25 additions & 0 deletions windows-release/build-steps.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
parameters:
ShouldPGO: false
DoFreethreaded: false

steps:
- template: ./checkout.yml
Expand All @@ -15,6 +16,12 @@ steps:
Write-Host "##vso[build.addbuildtag]$($d.PythonVersion)-$(Name)"
displayName: 'Extract version numbers'

- ${{ if eq(parameters.DoFreethreaded, 'true') }}:
- powershell: |
Write-Host "##vso[build.addbuildtag]freethreaded"
Write-Host "##vso[build.addbuildtag]$(VersionText)-freethreaded"
displayName: 'Add freethreaded tags'

- ${{ if eq(parameters.ShouldPGO, 'false') }}:
- powershell: |
$env:SigningCertificate = $null
Expand All @@ -24,6 +31,15 @@ steps:
IncludeUwp: true
Py_OutDir: '$(Build.BinariesDirectory)\bin'

- ${{ if eq(parameters.DoFreethreaded, 'true') }}:
- powershell: |
$env:SigningCertificate = $null
.\PCbuild\build.bat -v -p $(Platform) -c $(Configuration) --disable-gil
displayName: 'Run free-threaded build'
env:
IncludeUwp: true
Py_OutDir: '$(Build.BinariesDirectory)\bin'

- ${{ if eq(parameters.ShouldPGO, 'true') }}:
- powershell: |
$env:SigningCertificate = $null
Expand All @@ -33,6 +49,15 @@ steps:
IncludeUwp: true
Py_OutDir: '$(Build.BinariesDirectory)\bin'

- ${{ if eq(parameters.DoFreethreaded, 'true') }}:
- powershell: |
$env:SigningCertificate = $null
.\PCbuild\build.bat -v -p $(Platform) --pgo --disable-gil
displayName: 'Run free-threaded build'
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)
Expand Down
9 changes: 8 additions & 1 deletion windows-release/msi-steps.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
parameters:
ARM64TclTk: true
DoFreethreaded: false
SigningCertificate: ''

steps:
Expand Down Expand Up @@ -90,7 +91,7 @@ steps:
call Tools\msi\get_externals.bat
call PCbuild\find_python.bat
echo ##vso[task.setvariable variable=PYTHON]%PYTHON%
call PCbuild/find_msbuild.bat
call PCbuild\find_msbuild.bat
echo ##vso[task.setvariable variable=MSBUILD]%MSBUILD%
displayName: 'Get external dependencies'

Expand All @@ -106,6 +107,12 @@ steps:
gc msbuild.rsp
displayName: 'Generate response file'

- ${{ if eq(parameters.DoFreethreaded, 'true') }}:
- powershell: |
"/p:IncludeFreethreaded=true" | Out-File "$(ResponseFile)" -Append -Encoding UTF8
gc "$(ResponseFile)"
displayName: 'Add Include_freethreaded to response file'

- ${{ if parameters.SigningCertificate }}:
- task: DotNetCoreCLI@2
inputs:
Expand Down
3 changes: 3 additions & 0 deletions windows-release/purge.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,9 @@
"exe.msi",
"exe_d.msi",
"exe_pdb.msi",
"freethreaded.msi",
"freethreaded_d.msi",
"freethreaded_pdb.msi",
"launcher.msi",
"lib.msi",
"lib_d.msi",
Expand Down
7 changes: 7 additions & 0 deletions windows-release/stage-build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ parameters:
DoPGO: false
# DoPGOARM64 only applies if DoPGO is also true
DoPGOARM64: true
DoFreethreaded: false

jobs:
- job: Build_Docs
Expand Down Expand Up @@ -95,6 +96,8 @@ jobs:

steps:
- template: ./build-steps.yml
parameters:
DoFreethreaded: ${{ parameters.DoFreethreaded }}


- ${{ if eq(parameters.DoPGO, 'true') }}:
Expand All @@ -118,6 +121,7 @@ jobs:
steps:
- template: ./build-steps-pgo.yml
parameters:
DoFreethreaded: ${{ parameters.DoFreethreaded }}
PGInstrument: true
PGRun: true
PGUpdate: true
Expand All @@ -143,6 +147,7 @@ jobs:
steps:
- template: ./build-steps-pgo.yml
parameters:
DoFreethreaded: ${{ parameters.DoFreethreaded }}
PGInstrument: true

- job: Build_Python_PGO_2
Expand All @@ -168,6 +173,7 @@ jobs:
steps:
- template: ./build-steps-pgo.yml
parameters:
DoFreethreaded: ${{ parameters.DoFreethreaded }}
PGRun: true

- job: Build_Python_PGO_3
Expand All @@ -191,6 +197,7 @@ jobs:
steps:
- template: ./build-steps-pgo.yml
parameters:
DoFreethreaded: ${{ parameters.DoFreethreaded }}
PGUpdate: true


Expand Down
15 changes: 15 additions & 0 deletions windows-release/stage-layout-full.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
parameters:
ARM64TclTk: true
DoFreethreaded: false

jobs:
- job: Make_Layouts
Expand Down Expand Up @@ -73,8 +74,22 @@ jobs:
env:
TCL_LIBRARY: $(TclLibrary)

- ${{ if eq(parameters.DoFreethreaded, 'true') }}:
- powershell: |
$(LayoutCmd) --copy "$(Build.ArtifactStagingDirectory)\layout_freethreaded" --preset-default --include-freethreaded
displayName: 'Generate full freethreaded layout'
env:
TCL_LIBRARY: $(TclLibrary)

- task: PublishPipelineArtifact@0
displayName: 'Publish Artifact: layout_full_$(Name)'
inputs:
targetPath: '$(Build.ArtifactStagingDirectory)\layout'
artifactName: layout_full_$(Name)

- ${{ if eq(parameters.DoFreethreaded, 'true') }}:
- task: PublishPipelineArtifact@0
displayName: 'Publish Artifact: layout_full_freethreaded_$(Name)'
inputs:
targetPath: '$(Build.ArtifactStagingDirectory)\layout_freethreaded'
artifactName: layout_full_freethreaded_$(Name)
15 changes: 15 additions & 0 deletions windows-release/stage-layout-nuget.yml
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
parameters:
DoFreethreaded: false

jobs:
- job: Make_Nuget_Layout
displayName: Make Nuget layout
Expand Down Expand Up @@ -45,8 +48,20 @@ jobs:
$(LayoutCmd) --copy "$(Build.ArtifactStagingDirectory)\nuget" --preset-nuget
displayName: 'Generate nuget layout'

- ${{ if eq(parameters.DoFreethreaded, 'true') }}:
- powershell: |
$(LayoutCmd) --copy "$(Build.ArtifactStagingDirectory)\nuget_freethreaded" --preset-nuget --include-freethreaded
displayName: 'Generate freethreaded nuget layout'

- task: PublishPipelineArtifact@0
displayName: 'Publish Artifact: layout_nuget_$(Name)'
inputs:
targetPath: '$(Build.ArtifactStagingDirectory)\nuget'
artifactName: layout_nuget_$(Name)

- ${{ if eq(parameters.DoFreethreaded, 'true') }}:
- task: PublishPipelineArtifact@0
displayName: 'Publish Artifact: layout_nuget_freethreaded_$(Name)'
inputs:
targetPath: '$(Build.ArtifactStagingDirectory)\nuget_freethreaded'
artifactName: layout_nuget_freethreaded_$(Name)
18 changes: 10 additions & 8 deletions windows-release/stage-msi.yml
Original file line number Diff line number Diff line change
@@ -1,15 +1,16 @@
parameters:
ARM64TclTk: true
DoFreethreaded: false
SigningCertificate: ''

jobs:
- ${{ if parameters.SigningCertificate }}:
- job: Make_Signed_MSI
displayName: Make signed MSI

pool:
vmImage: windows-2022

variables:
- group: CPythonSign
- name: ReleaseUri
Expand All @@ -18,10 +19,10 @@ jobs:
value: https://www.python.org/ftp/python/{version}/{arch}{releasename}/{msi}
- name: Py_OutDir
value: $(Build.BinariesDirectory)

workspace:
clean: all

steps:
- template: msi-steps.yml
parameters:
Expand All @@ -32,19 +33,20 @@ jobs:
- ${{ else }}:
- job: Make_MSI
displayName: Make MSI

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 }}
DoFreethreaded: ${{ parameters.DoFreethreaded }}
Loading