mirror of https://github.com/python/cpython
Remove Windows release build script (GH-92908)
The scripts have been migrated to the release-tools repository
This commit is contained in:
parent
9a1adf2790
commit
3fa023721b
|
@ -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 }}
|
|
|
@ -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@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@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@2
|
|
||||||
displayName: 'Layout Artifact: symbols'
|
|
||||||
inputs:
|
|
||||||
sourceFolder: $(Build.BinariesDirectory)\bin\$(Arch)
|
|
||||||
targetFolder: $(Build.ArtifactStagingDirectory)\symbols\$(Name)
|
|
||||||
flatten: true
|
|
||||||
contents: |
|
|
||||||
**\*.pdb
|
|
||||||
|
|
||||||
- task: PublishBuildArtifacts@1
|
|
||||||
displayName: 'Publish Artifact: symbols'
|
|
||||||
inputs:
|
|
||||||
PathToPublish: '$(Build.ArtifactStagingDirectory)\symbols'
|
|
||||||
ArtifactName: symbols
|
|
|
@ -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'])))
|
|
|
@ -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'
|
|
|
@ -1,23 +0,0 @@
|
||||||
steps:
|
|
||||||
- task: DownloadPipelineArtifact@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'
|
|
|
@ -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)
|
|
|
@ -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@1
|
|
||||||
displayName: 'Download artifact: doc'
|
|
||||||
inputs:
|
|
||||||
artifactName: doc
|
|
||||||
targetPath: $(Build.BinariesDirectory)\doc
|
|
||||||
|
|
||||||
- task: CopyFiles@2
|
|
||||||
displayName: 'Merge documentation files'
|
|
||||||
inputs:
|
|
||||||
sourceFolder: $(Build.BinariesDirectory)\doc
|
|
||||||
targetFolder: $(Build.SourcesDirectory)\Doc\build
|
|
||||||
|
|
||||||
- task: DownloadPipelineArtifact@1
|
|
||||||
displayName: 'Download artifact: bin_win32'
|
|
||||||
inputs:
|
|
||||||
artifactName: bin_win32
|
|
||||||
targetPath: $(Build.BinariesDirectory)\win32
|
|
||||||
|
|
||||||
- task: DownloadPipelineArtifact@1
|
|
||||||
displayName: 'Download artifact: bin_win32_d'
|
|
||||||
inputs:
|
|
||||||
artifactName: bin_win32_d
|
|
||||||
targetPath: $(Build.BinariesDirectory)\win32
|
|
||||||
|
|
||||||
- task: DownloadPipelineArtifact@1
|
|
||||||
displayName: 'Download artifact: bin_amd64'
|
|
||||||
inputs:
|
|
||||||
artifactName: bin_amd64
|
|
||||||
targetPath: $(Build.BinariesDirectory)\amd64
|
|
||||||
|
|
||||||
- task: DownloadPipelineArtifact@1
|
|
||||||
displayName: 'Download artifact: bin_amd64_d'
|
|
||||||
inputs:
|
|
||||||
artifactName: bin_amd64_d
|
|
||||||
targetPath: $(Build.BinariesDirectory)\amd64
|
|
||||||
|
|
||||||
- task: DownloadPipelineArtifact@1
|
|
||||||
displayName: 'Download artifact: bin_arm64'
|
|
||||||
condition: and(succeeded(), eq(variables['PublishARM64'], 'true'))
|
|
||||||
inputs:
|
|
||||||
artifactName: bin_arm64
|
|
||||||
targetPath: $(Build.BinariesDirectory)\arm64
|
|
||||||
|
|
||||||
- task: DownloadPipelineArtifact@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@1
|
|
||||||
displayName: 'Download artifact: tcltk_lib_win32'
|
|
||||||
inputs:
|
|
||||||
artifactName: tcltk_lib_win32
|
|
||||||
targetPath: $(Build.BinariesDirectory)\tcltk_lib_win32
|
|
||||||
|
|
||||||
- task: DownloadPipelineArtifact@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@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@2
|
|
||||||
displayName: 'Assemble artifact: msi (win32)'
|
|
||||||
inputs:
|
|
||||||
sourceFolder: $(Build.BinariesDirectory)\win32\en-us
|
|
||||||
targetFolder: $(Build.ArtifactStagingDirectory)\msi\win32
|
|
||||||
contents: |
|
|
||||||
*.msi
|
|
||||||
*.cab
|
|
||||||
*.exe
|
|
||||||
|
|
||||||
- task: CopyFiles@2
|
|
||||||
displayName: 'Assemble artifact: msi (amd64)'
|
|
||||||
inputs:
|
|
||||||
sourceFolder: $(Build.BinariesDirectory)\amd64\en-us
|
|
||||||
targetFolder: $(Build.ArtifactStagingDirectory)\msi\amd64
|
|
||||||
contents: |
|
|
||||||
*.msi
|
|
||||||
*.cab
|
|
||||||
*.exe
|
|
||||||
|
|
||||||
- task: CopyFiles@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@0
|
|
||||||
displayName: 'Publish MSI'
|
|
||||||
inputs:
|
|
||||||
targetPath: '$(Build.ArtifactStagingDirectory)\msi'
|
|
||||||
artifactName: msi
|
|
|
@ -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@2
|
|
||||||
displayName: 'Assemble artifact: Doc'
|
|
||||||
inputs:
|
|
||||||
sourceFolder: $(Build.BinariesDirectory)\Doc
|
|
||||||
targetFolder: $(Build.ArtifactStagingDirectory)\Doc
|
|
||||||
contents: |
|
|
||||||
html\**\*
|
|
||||||
htmlhelp\*.chm
|
|
||||||
|
|
||||||
- task: PublishPipelineArtifact@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@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@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@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@0
|
|
||||||
displayName: 'Publish artifact: tcltk_lib_win32'
|
|
||||||
inputs:
|
|
||||||
targetPath: '$(Build.ArtifactStagingDirectory)\tcl_win32'
|
|
||||||
artifactName: tcltk_lib_win32
|
|
||||||
|
|
||||||
- task: PublishPipelineArtifact@0
|
|
||||||
displayName: 'Publish artifact: tcltk_lib_amd64'
|
|
||||||
inputs:
|
|
||||||
targetPath: '$(Build.ArtifactStagingDirectory)\tcl_amd64'
|
|
||||||
artifactName: tcltk_lib_amd64
|
|
||||||
|
|
||||||
- ${{ if eq(parameters.ARM64TclTk, true) }}:
|
|
||||||
- task: PublishPipelineArtifact@0
|
|
||||||
displayName: 'Publish artifact: tcltk_lib_arm64'
|
|
||||||
inputs:
|
|
||||||
targetPath: '$(Build.ArtifactStagingDirectory)\tcl_arm64'
|
|
||||||
artifactName: tcltk_lib_arm64
|
|
|
@ -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@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@0
|
|
||||||
displayName: 'Publish Artifact: layout_embed_$(Name)'
|
|
||||||
inputs:
|
|
||||||
targetPath: '$(Build.ArtifactStagingDirectory)\layout'
|
|
||||||
artifactName: layout_embed_$(Name)
|
|
||||||
|
|
||||||
- task: PublishBuildArtifacts@1
|
|
||||||
displayName: 'Publish Artifact: embed'
|
|
||||||
inputs:
|
|
||||||
PathtoPublish: '$(Build.ArtifactStagingDirectory)\embed'
|
|
||||||
ArtifactName: embed
|
|
|
@ -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@1
|
|
||||||
displayName: 'Download artifact: bin_$(Name)'
|
|
||||||
inputs:
|
|
||||||
artifactName: bin_$(Name)
|
|
||||||
targetPath: $(Build.BinariesDirectory)\bin
|
|
||||||
|
|
||||||
- task: DownloadPipelineArtifact@1
|
|
||||||
displayName: 'Download artifact: bin_$(Name)_d'
|
|
||||||
inputs:
|
|
||||||
artifactName: bin_$(Name)_d
|
|
||||||
targetPath: $(Build.BinariesDirectory)\bin
|
|
||||||
|
|
||||||
- task: DownloadPipelineArtifact@1
|
|
||||||
displayName: 'Download artifact: doc'
|
|
||||||
inputs:
|
|
||||||
artifactName: doc
|
|
||||||
targetPath: $(Build.BinariesDirectory)\doc
|
|
||||||
|
|
||||||
- task: DownloadPipelineArtifact@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@0
|
|
||||||
displayName: 'Publish Artifact: layout_full_$(Name)'
|
|
||||||
inputs:
|
|
||||||
targetPath: '$(Build.ArtifactStagingDirectory)\layout'
|
|
||||||
artifactName: layout_full_$(Name)
|
|
|
@ -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@1
|
|
||||||
displayName: 'Download artifact: bin_$(Name)'
|
|
||||||
inputs:
|
|
||||||
artifactName: bin_$(Name)
|
|
||||||
targetPath: $(Build.BinariesDirectory)\bin
|
|
||||||
|
|
||||||
- task: DownloadPipelineArtifact@1
|
|
||||||
displayName: 'Download artifact: bin_$(Name)_d'
|
|
||||||
inputs:
|
|
||||||
artifactName: bin_$(Name)_d
|
|
||||||
targetPath: $(Build.BinariesDirectory)\bin
|
|
||||||
|
|
||||||
- task: DownloadPipelineArtifact@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@0
|
|
||||||
displayName: 'Publish Artifact: layout_appxstore_$(Name)'
|
|
||||||
inputs:
|
|
||||||
targetPath: '$(Build.ArtifactStagingDirectory)\appx-store'
|
|
||||||
artifactName: layout_appxstore_$(Name)
|
|
||||||
|
|
||||||
- task: DownloadPipelineArtifact@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@0
|
|
||||||
displayName: 'Publish Artifact: layout_appx_$(Name)'
|
|
||||||
inputs:
|
|
||||||
targetPath: '$(Build.ArtifactStagingDirectory)\appx'
|
|
||||||
artifactName: layout_appx_$(Name)
|
|
|
@ -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@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@0
|
|
||||||
displayName: 'Publish Artifact: layout_nuget_$(Name)'
|
|
||||||
inputs:
|
|
||||||
targetPath: '$(Build.ArtifactStagingDirectory)\nuget'
|
|
||||||
artifactName: layout_nuget_$(Name)
|
|
|
@ -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 }}
|
|
|
@ -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@1
|
|
||||||
displayName: 'Download artifact: layout_$(Artifact)_$(Name)'
|
|
||||||
inputs:
|
|
||||||
artifactName: layout_$(Artifact)_$(Name)
|
|
||||||
targetPath: $(Build.BinariesDirectory)\layout
|
|
||||||
|
|
||||||
- task: DownloadBuildArtifacts@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@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@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@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@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@1
|
|
||||||
displayName: 'Publish Artifact: MSIX'
|
|
||||||
inputs:
|
|
||||||
PathtoPublish: '$(Build.BinariesDirectory)\unsigned_msix'
|
|
||||||
ArtifactName: msix
|
|
|
@ -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@1
|
|
||||||
displayName: 'Download artifact: layout_nuget_$(Name)'
|
|
||||||
inputs:
|
|
||||||
artifactName: layout_nuget_$(Name)
|
|
||||||
targetPath: $(Build.BinariesDirectory)\layout
|
|
||||||
|
|
||||||
- task: NugetToolInstaller@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@1
|
|
||||||
displayName: 'Publish Artifact: nuget'
|
|
||||||
inputs:
|
|
||||||
PathtoPublish: '$(Build.ArtifactStagingDirectory)'
|
|
||||||
ArtifactName: nuget
|
|
|
@ -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@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@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@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'
|
|
|
@ -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@0
|
|
||||||
displayName: 'Use Python 3.6 or later'
|
|
||||||
inputs:
|
|
||||||
versionSpec: '>=3.6'
|
|
||||||
|
|
||||||
- ${{ if parameters.BuildToPublish }}:
|
|
||||||
- task: DownloadPipelineArtifact@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@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@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@1
|
|
||||||
displayName: 'Download artifact: Doc'
|
|
||||||
inputs:
|
|
||||||
artifactName: Doc
|
|
||||||
targetPath: $(Build.BinariesDirectory)\Doc
|
|
||||||
|
|
||||||
- task: DownloadPipelineArtifact@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@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@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@0
|
|
||||||
displayName: 'Publish Artifact: hashes'
|
|
||||||
inputs:
|
|
||||||
targetPath: '$(Build.ArtifactStagingDirectory)\hashes'
|
|
||||||
artifactName: hashes
|
|
|
@ -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@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@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
|
|
|
@ -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@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@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@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'
|
|
|
@ -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@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'
|
|
|
@ -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@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@1
|
|
||||||
displayName: 'Publish Artifact: logs'
|
|
||||||
condition: true
|
|
||||||
continueOnError: true
|
|
||||||
inputs:
|
|
||||||
PathtoPublish: '$(Build.ArtifactStagingDirectory)\logs'
|
|
||||||
ArtifactName: msi_testlogs
|
|
|
@ -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@0
|
|
||||||
displayName: 'Download artifact: nuget'
|
|
||||||
inputs:
|
|
||||||
artifactName: nuget
|
|
||||||
downloadPath: $(Build.BinariesDirectory)
|
|
||||||
|
|
||||||
- task: NugetToolInstaller@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'
|
|
Loading…
Reference in New Issue