diff --git a/.azure-pipelines/ci.yml b/.azure-pipelines/ci.yml deleted file mode 100644 index 4c2f115cd9b600..00000000000000 --- a/.azure-pipelines/ci.yml +++ /dev/null @@ -1,162 +0,0 @@ -variables: - manylinux: false - coverage: false - -resources: - containers: - - container: manylinux1 - image: pyca/cryptography-manylinux1:x86_64 - -jobs: -- job: Prebuild - displayName: Pre-build checks - - pool: - vmImage: ubuntu-16.04 - - steps: - - template: ./prebuild-checks.yml - - -- job: Docs_PR - displayName: Docs PR - dependsOn: Prebuild - condition: and(succeeded(), eq(dependencies.Prebuild.outputs['docs.run'], 'true')) - - pool: - vmImage: ubuntu-16.04 - - steps: - - template: ./docs-steps.yml - parameters: - upload: true - - -- job: macOS_CI_Tests - displayName: macOS CI Tests - dependsOn: Prebuild - condition: and(succeeded(), eq(dependencies.Prebuild.outputs['tests.run'], 'true')) - - variables: - testRunTitle: '$(build.sourceBranchName)-macos' - testRunPlatform: macos - - pool: - vmImage: macos-10.14 - - steps: - - template: ./macos-steps.yml - - -- job: Ubuntu_CI_Tests - displayName: Ubuntu CI Tests - dependsOn: Prebuild - condition: and(succeeded(), eq(dependencies.Prebuild.outputs['tests.run'], 'true')) - - pool: - vmImage: ubuntu-16.04 - - variables: - testRunTitle: '$(build.sourceBranchName)-linux' - testRunPlatform: linux - openssl_version: 1.1.1d - - steps: - - template: ./posix-steps.yml - parameters: - dependencies: apt - - -- job: ManyLinux1_CI_Tests - displayName: ManyLinux1 CI Tests - dependsOn: Prebuild - condition: | - and( - and( - succeeded(), - eq(variables['manylinux'], 'true') - ), - eq(dependencies.Prebuild.outputs['tests.run'], 'true') - ) - - pool: - vmImage: ubuntu-16.04 - - container: manylinux1 - - variables: - testRunTitle: '$(build.sourceBranchName)-manylinux1' - testRunPlatform: manylinux1 - openssl_version: '' - - steps: - - template: ./posix-steps.yml - parameters: - dependencies: yum - sudo_dependencies: '' - xvfb: false - patchcheck: false - - -- job: Ubuntu_Coverage_CI_Tests - displayName: Ubuntu CI Tests (coverage) - dependsOn: Prebuild - condition: | - and( - and( - succeeded(), - eq(variables['coverage'], 'true') - ), - eq(dependencies.Prebuild.outputs['tests.run'], 'true') - ) - - pool: - vmImage: ubuntu-16.04 - - variables: - testRunTitle: '$(Build.SourceBranchName)-linux-coverage' - testRunPlatform: linux-coverage - openssl_version: 1.1.1d - - steps: - - template: ./posix-steps.yml - parameters: - dependencies: apt - coverage: true - - -- job: Windows_CI_Tests - displayName: Windows CI Tests - dependsOn: Prebuild - condition: and(succeeded(), eq(dependencies.Prebuild.outputs['tests.run'], 'true')) - - pool: - vmImage: windows-2019 - - strategy: - matrix: - win32: - arch: win32 - buildOpt: - testRunTitle: '$(Build.SourceBranchName)-win32' - testRunPlatform: win32 - win64: - arch: amd64 - buildOpt: '-p x64' - testRunTitle: '$(Build.SourceBranchName)-win64' - testRunPlatform: win64 - maxParallel: 4 - - steps: - - template: ./windows-steps.yml - - - template: ./windows-layout-steps.yml - parameters: - kind: nuget - - template: ./windows-layout-steps.yml - parameters: - kind: embed - - template: ./windows-layout-steps.yml - parameters: - kind: appx - fulltest: true diff --git a/.azure-pipelines/docs-steps.yml b/.azure-pipelines/docs-steps.yml deleted file mode 100644 index eaf4ad01927aeb..00000000000000 --- a/.azure-pipelines/docs-steps.yml +++ /dev/null @@ -1,46 +0,0 @@ -parameters: - latex: false - upload: false - -steps: -- checkout: self - clean: true - fetchDepth: 5 - -- task: UsePythonVersion@0 - displayName: 'Use Python 3.6 or later' - inputs: - versionSpec: '>=3.6' - -- script: python -m pip install sphinx==2.2.0 blurb python-docs-theme - displayName: 'Install build dependencies' - -- ${{ if ne(parameters.latex, 'true') }}: - - script: make check suspicious html PYTHON=python - workingDirectory: '$(build.sourcesDirectory)/Doc' - displayName: 'Build documentation' - -- ${{ if eq(parameters.latex, 'true') }}: - - script: sudo apt-get update && sudo apt-get install -qy --force-yes texlive-full - displayName: 'Install LaTeX' - - - script: make dist PYTHON=python SPHINXBUILD='python -m sphinx' BLURB='python -m blurb' - workingDirectory: '$(build.sourcesDirectory)/Doc' - displayName: 'Build documentation' - -- ${{ if eq(parameters.upload, 'true') }}: - - task: PublishBuildArtifacts@1 - displayName: 'Publish docs' - - inputs: - PathToPublish: '$(build.sourcesDirectory)/Doc/build' - ArtifactName: docs - publishLocation: Container - - - ${{ if eq(parameters.latex, 'true') }}: - - task: PublishBuildArtifacts@1 - displayName: 'Publish dist' - inputs: - PathToPublish: '$(build.sourcesDirectory)/Doc/dist' - ArtifactName: docs_dist - publishLocation: Container diff --git a/.azure-pipelines/macos-steps.yml b/.azure-pipelines/macos-steps.yml deleted file mode 100644 index fa38a0df8c87b8..00000000000000 --- a/.azure-pipelines/macos-steps.yml +++ /dev/null @@ -1,27 +0,0 @@ -steps: -- checkout: self - clean: true - fetchDepth: 5 - -- script: ./configure --with-pydebug --with-openssl=/usr/local/opt/openssl --prefix=/opt/python-azdev - displayName: 'Configure CPython (debug)' - -- script: make -j4 - displayName: 'Build CPython' - -- script: make pythoninfo - displayName: 'Display build info' - -- script: make buildbottest TESTOPTS="-j4 -uall,-cpu --junit-xml=$(build.binariesDirectory)/test-results.xml" - displayName: 'Tests' - continueOnError: true - timeoutInMinutes: 30 - -- task: PublishTestResults@2 - displayName: 'Publish Test Results' - inputs: - testResultsFiles: '$(build.binariesDirectory)/test-results.xml' - mergeTestResults: true - testRunTitle: $(testRunTitle) - platform: $(testRunPlatform) - condition: succeededOrFailed() diff --git a/.azure-pipelines/posix-deps-apt.sh b/.azure-pipelines/posix-deps-apt.sh deleted file mode 100755 index e0f4ca5d8d8e88..00000000000000 --- a/.azure-pipelines/posix-deps-apt.sh +++ /dev/null @@ -1,27 +0,0 @@ -#!/bin/sh -apt-get update - -apt-get -yq install \ - build-essential \ - zlib1g-dev \ - libbz2-dev \ - liblzma-dev \ - libncurses5-dev \ - libreadline6-dev \ - libsqlite3-dev \ - libssl-dev \ - libgdbm-dev \ - tk-dev \ - lzma \ - lzma-dev \ - liblzma-dev \ - libffi-dev \ - uuid-dev \ - xvfb - -if [ ! -z "$1" ] -then - echo ##vso[task.prependpath]$PWD/multissl/openssl/$1 - echo ##vso[task.setvariable variable=OPENSSL_DIR]$PWD/multissl/openssl/$1 - python3 Tools/ssl/multissltests.py --steps=library --base-directory $PWD/multissl --openssl $1 --system Linux -fi diff --git a/.azure-pipelines/posix-steps.yml b/.azure-pipelines/posix-steps.yml deleted file mode 100644 index b6dde593019e6c..00000000000000 --- a/.azure-pipelines/posix-steps.yml +++ /dev/null @@ -1,81 +0,0 @@ -parameters: - coverage: false - sudo_dependencies: sudo - dependencies: apt - patchcheck: true - xvfb: true - -steps: -- checkout: self - clean: true - fetchDepth: 5 - -# Work around a known issue affecting Ubuntu VMs on Pipelines -- script: sudo setfacl -Rb /home/vsts - displayName: 'Workaround ACL issue' - -- script: ${{ parameters.sudo_dependencies }} ./.azure-pipelines/posix-deps-${{ parameters.dependencies }}.sh $(openssl_version) - displayName: 'Install dependencies' - -- script: ./configure --with-pydebug - displayName: 'Configure CPython (debug)' - -- script: make -j4 - displayName: 'Build CPython' - -- ${{ if eq(parameters.coverage, 'true') }}: - - script: ./python -m venv venv && ./venv/bin/python -m pip install -U coverage - displayName: 'Set up virtual environment' - - - script: ./venv/bin/python -m test.pythoninfo - displayName: 'Display build info' - - - script: | - $COMMAND -m coverage run --pylib -m test \ - --fail-env-changed \ - -uall,-cpu \ - --junit-xml=$(build.binariesDirectory)/test-results.xml \ - -x test_multiprocessing_fork \ - -x test_multiprocessing_forkserver \ - -x test_multiprocessing_spawn \ - -x test_concurrent_futures - displayName: 'Tests with coverage' - env: - ${{ if eq(parameters.xvfb, 'true') }}: - COMMAND: xvfb-run ./venv/bin/python - ${{ if ne(parameters.xvfb, 'true') }}: - COMMAND: ./venv/bin/python - - - script: ./venv/bin/python -m coverage xml - displayName: 'Generate coverage.xml' - - - script: source ./venv/bin/activate && bash <(curl -s https://codecov.io/bash) -y .github/codecov.yml - displayName: 'Publish code coverage results' - - -- ${{ if ne(parameters.coverage, 'true') }}: - - script: make pythoninfo - displayName: 'Display build info' - - - script: $COMMAND buildbottest TESTOPTS="-j4 -uall,-cpu --junit-xml=$(build.binariesDirectory)/test-results.xml" - displayName: 'Tests' - env: - ${{ if eq(parameters.xvfb, 'true') }}: - COMMAND: xvfb-run make - ${{ if ne(parameters.xvfb, 'true') }}: - COMMAND: make - -- ${{ if eq(parameters.patchcheck, 'true') }}: - - script: ./python Tools/scripts/patchcheck.py --travis true - displayName: 'Run patchcheck.py' - condition: and(succeeded(), eq(variables['Build.Reason'], 'PullRequest')) - - -- task: PublishTestResults@2 - displayName: 'Publish Test Results' - inputs: - testResultsFiles: '$(build.binariesDirectory)/test-results.xml' - mergeTestResults: true - testRunTitle: $(testRunTitle) - platform: $(testRunPlatform) - condition: succeededOrFailed() diff --git a/.azure-pipelines/pr.yml b/.azure-pipelines/pr.yml deleted file mode 100644 index 73d4f55b864500..00000000000000 --- a/.azure-pipelines/pr.yml +++ /dev/null @@ -1,156 +0,0 @@ -variables: - manylinux: false - coverage: false - -resources: - containers: - - container: manylinux1 - image: pyca/cryptography-manylinux1:x86_64 - -jobs: -- job: Prebuild - displayName: Pre-build checks - - pool: - vmImage: ubuntu-16.04 - - steps: - - template: ./prebuild-checks.yml - - -- job: Docs_PR - displayName: Docs PR - dependsOn: Prebuild - condition: and(succeeded(), eq(dependencies.Prebuild.outputs['docs.run'], 'true')) - - pool: - vmImage: ubuntu-16.04 - - steps: - - template: ./docs-steps.yml - - -- job: macOS_PR_Tests - displayName: macOS PR Tests - dependsOn: Prebuild - condition: and(succeeded(), eq(dependencies.Prebuild.outputs['tests.run'], 'true')) - - variables: - testRunTitle: '$(system.pullRequest.TargetBranch)-macos' - testRunPlatform: macos - - pool: - vmImage: macos-10.14 - - steps: - - template: ./macos-steps.yml - parameters: - targetBranch: $(System.PullRequest.TargetBranch) - - -- job: Ubuntu_PR_Tests - displayName: Ubuntu PR Tests - dependsOn: Prebuild - condition: and(succeeded(), eq(dependencies.Prebuild.outputs['tests.run'], 'true')) - - pool: - vmImage: ubuntu-16.04 - - variables: - testRunTitle: '$(system.pullRequest.TargetBranch)-linux' - testRunPlatform: linux - openssl_version: 1.1.1d - - steps: - - template: ./posix-steps.yml - parameters: - dependencies: apt - - -- job: ManyLinux1_PR_Tests - displayName: ManyLinux1 PR Tests - dependsOn: Prebuild - condition: | - and( - and( - succeeded(), - eq(variables['manylinux'], 'true') - ), - eq(dependencies.Prebuild.outputs['tests.run'], 'true') - ) - - pool: - vmImage: ubuntu-16.04 - - container: manylinux1 - - variables: - testRunTitle: '$(system.pullRequest.TargetBranch)-manylinux1' - testRunPlatform: manylinux1 - openssl_version: '' - - steps: - - template: ./posix-steps.yml - parameters: - dependencies: yum - sudo_dependencies: '' - xvfb: false - patchcheck: false - - -- job: Ubuntu_Coverage_PR_Tests - displayName: Ubuntu PR Tests (coverage) - dependsOn: Prebuild - condition: | - and( - and( - succeeded(), - eq(variables['coverage'], 'true') - ), - eq(dependencies.Prebuild.outputs['tests.run'], 'true') - ) - - pool: - vmImage: ubuntu-16.04 - - variables: - testRunTitle: '$(Build.SourceBranchName)-linux-coverage' - testRunPlatform: linux-coverage - openssl_version: 1.1.1d - - steps: - - template: ./posix-steps.yml - parameters: - dependencies: apt - coverage: true - - -- job: Windows_PR_Tests - displayName: Windows PR Tests - dependsOn: Prebuild - condition: and(succeeded(), eq(dependencies.Prebuild.outputs['tests.run'], 'true')) - - pool: - vmImage: windows-2019 - - strategy: - matrix: - win32: - arch: win32 - buildOpt: - testRunTitle: '$(System.PullRequest.TargetBranch)-win32' - testRunPlatform: win32 - win64: - arch: amd64 - buildOpt: '-p x64' - testRunTitle: '$(System.PullRequest.TargetBranch)-win64' - testRunPlatform: win64 - winarm64: - arch: arm64 - buildOpt: '-p arm64' - maxParallel: 4 - - steps: - - template: ./windows-steps.yml - parameters: - targetBranch: $(System.PullRequest.TargetBranch) diff --git a/.azure-pipelines/prebuild-checks.yml b/.azure-pipelines/prebuild-checks.yml deleted file mode 100644 index 30ff642d1267a1..00000000000000 --- a/.azure-pipelines/prebuild-checks.yml +++ /dev/null @@ -1,36 +0,0 @@ -steps: -- checkout: self - fetchDepth: 5 - -- script: echo "##vso[task.setvariable variable=diffTarget]HEAD~1" - displayName: Set default diff target - -- script: | - git fetch -q origin $(System.PullRequest.TargetBranch) - echo "##vso[task.setvariable variable=diffTarget]HEAD \$(git merge-base HEAD FETCH_HEAD)" - displayName: Fetch comparison tree - condition: and(succeeded(), variables['System.PullRequest.TargetBranch']) - -- script: | - if ! git diff --name-only $(diffTarget) | grep -qE '(\.rst$|^Doc|^Misc)' - then - echo "No docs were updated: docs.run=false" - echo "##vso[task.setvariable variable=run;isOutput=true]false" - else - echo "Docs were updated: docs.run=true" - echo "##vso[task.setvariable variable=run;isOutput=true]true" - fi - displayName: Detect documentation changes - name: docs - -- script: | - if ! git diff --name-only $(diffTarget) | grep -qvE '(\.rst$|^Doc|^Misc)' - then - echo "Only docs were updated: tests.run=false" - echo "##vso[task.setvariable variable=run;isOutput=true]false" - else - echo "Code was updated: tests.run=true" - echo "##vso[task.setvariable variable=run;isOutput=true]true" - fi - displayName: Detect source changes - name: tests diff --git a/.azure-pipelines/windows-layout-steps.yml b/.azure-pipelines/windows-layout-steps.yml deleted file mode 100644 index e15729fac3443d..00000000000000 --- a/.azure-pipelines/windows-layout-steps.yml +++ /dev/null @@ -1,28 +0,0 @@ -parameters: - kind: nuget - extraOpts: --precompile - fulltest: false - -steps: -- script: .\python.bat PC\layout -vv -s "$(Build.SourcesDirectory)" -b "$(Py_OutDir)\$(arch)" -t "$(Build.BinariesDirectory)\layout-tmp-${{ parameters.kind }}-$(arch)" --copy "$(Build.BinariesDirectory)\layout-${{ parameters.kind }}-$(arch)" ${{ parameters.extraOpts }} --preset-${{ parameters.kind }} --include-tests - displayName: Create ${{ parameters.kind }} layout - -- script: .\python.exe -m test.pythoninfo - workingDirectory: $(Build.BinariesDirectory)\layout-${{ parameters.kind }}-$(arch) - displayName: Show layout info (${{ parameters.kind }}) - -- ${{ if eq(parameters.fulltest, 'true') }}: - - script: .\python.exe -m test -q -uall -u-cpu -rwW --slowest --timeout=1200 -j0 --junit-xml="$(Build.BinariesDirectory)\test-results-${{ parameters.kind }}.xml" --tempdir "$(Build.BinariesDirectory)\tmp-${{ parameters.kind }}-$(arch)" - workingDirectory: $(Build.BinariesDirectory)\layout-${{ parameters.kind }}-$(arch) - displayName: ${{ parameters.kind }} Tests - env: - PREFIX: $(Build.BinariesDirectory)\layout-${{ parameters.kind }}-$(arch) - - - task: PublishTestResults@2 - displayName: Publish ${{ parameters.kind }} Test Results - inputs: - testResultsFiles: $(Build.BinariesDirectory)\test-results-${{ parameters.kind }}.xml - mergeTestResults: true - testRunTitle: ${{ parameters.kind }}-$(testRunTitle) - platform: $(testRunPlatform) - condition: succeededOrFailed() diff --git a/.azure-pipelines/windows-release.yml b/.azure-pipelines/windows-release.yml deleted file mode 100644 index 3d072e3b43e17e..00000000000000 --- a/.azure-pipelines/windows-release.yml +++ /dev/null @@ -1,129 +0,0 @@ -name: Release_$(Build.SourceBranchName)_$(SourceTag)_$(Date:yyyyMMdd)$(Rev:.rr) - -variables: - __RealSigningCertificate: 'Python Software Foundation' -# QUEUE TIME VARIABLES -# GitRemote: python -# SourceTag: -# DoPGO: true -# SigningCertificate: 'Python Software Foundation' -# SigningDescription: 'Built: $(Build.BuildNumber)' -# DoLayout: true -# DoMSIX: true -# DoNuget: true -# DoEmbed: true -# DoMSI: true -# DoPublish: false -# PyDotOrgUsername: '' -# PyDotOrgServer: '' -# BuildToPublish: '' - -trigger: none -pr: none - -stages: -- stage: Build - displayName: Build binaries - condition: and(succeeded(), not(variables['BuildToPublish'])) - jobs: - - template: windows-release/stage-build.yml - -- stage: Sign - displayName: Sign binaries - dependsOn: Build - condition: and(succeeded(), not(variables['BuildToPublish'])) - jobs: - - template: windows-release/stage-sign.yml - -- stage: Layout - displayName: Generate layouts - dependsOn: Sign - condition: and(succeeded(), not(variables['BuildToPublish'])) - jobs: - - template: windows-release/stage-layout-full.yml - - template: windows-release/stage-layout-embed.yml - - template: windows-release/stage-layout-nuget.yml - -- stage: Pack - dependsOn: Layout - condition: and(succeeded(), not(variables['BuildToPublish'])) - jobs: - - template: windows-release/stage-pack-nuget.yml - -- stage: Test - dependsOn: Pack - condition: and(succeeded(), not(variables['BuildToPublish'])) - jobs: - - template: windows-release/stage-test-embed.yml - - template: windows-release/stage-test-nuget.yml - -- stage: Layout_MSIX - displayName: Generate MSIX layouts - dependsOn: Sign - condition: and(succeeded(), and(eq(variables['DoMSIX'], 'true'), not(variables['BuildToPublish']))) - jobs: - - template: windows-release/stage-layout-msix.yml - -- stage: Pack_MSIX - displayName: Package MSIX - dependsOn: Layout_MSIX - condition: and(succeeded(), not(variables['BuildToPublish'])) - jobs: - - template: windows-release/stage-pack-msix.yml - -- stage: Build_MSI - displayName: Build MSI installer - dependsOn: Sign - condition: and(succeeded(), and(eq(variables['DoMSI'], 'true'), not(variables['BuildToPublish']))) - jobs: - - template: windows-release/stage-msi.yml - -- stage: Test_MSI - displayName: Test MSI installer - dependsOn: Build_MSI - condition: and(succeeded(), not(variables['BuildToPublish'])) - jobs: - - template: windows-release/stage-test-msi.yml - -- stage: PublishPyDotOrg - displayName: Publish to python.org - dependsOn: ['Test_MSI', 'Test'] - condition: and(succeeded(), and(eq(variables['DoPublish'], 'true'), not(variables['BuildToPublish']))) - jobs: - - template: windows-release/stage-publish-pythonorg.yml - -- stage: PublishNuget - displayName: Publish to nuget.org - dependsOn: Test - condition: and(succeeded(), and(eq(variables['DoPublish'], 'true'), not(variables['BuildToPublish']))) - jobs: - - template: windows-release/stage-publish-nugetorg.yml - -- stage: PublishStore - displayName: Publish to Store - dependsOn: Pack_MSIX - condition: and(succeeded(), and(eq(variables['DoPublish'], 'true'), not(variables['BuildToPublish']))) - jobs: - - template: windows-release/stage-publish-store.yml - - -- stage: PublishExistingPyDotOrg - displayName: Publish existing build to python.org - dependsOn: [] - condition: and(succeeded(), and(eq(variables['DoPublish'], 'true'), variables['BuildToPublish'])) - jobs: - - template: windows-release/stage-publish-pythonorg.yml - -- stage: PublishExistingNuget - displayName: Publish existing build to nuget.org - dependsOn: [] - condition: and(succeeded(), and(eq(variables['DoPublish'], 'true'), variables['BuildToPublish'])) - jobs: - - template: windows-release/stage-publish-nugetorg.yml - -- stage: PublishExistingStore - displayName: Publish existing build to Store - dependsOn: [] - condition: and(succeeded(), and(eq(variables['DoPublish'], 'true'), variables['BuildToPublish'])) - jobs: - - template: windows-release/stage-publish-store.yml diff --git a/.azure-pipelines/windows-release/build-steps.yml b/.azure-pipelines/windows-release/build-steps.yml deleted file mode 100644 index 5ca2016d65f9e1..00000000000000 --- 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@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 diff --git a/.azure-pipelines/windows-release/checkout.yml b/.azure-pipelines/windows-release/checkout.yml deleted file mode 100644 index d42d55fff08dda..00000000000000 --- 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 (/$(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)/)' - 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 e4de78555b3f66..00000000000000 --- 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/gpg-sign.yml b/.azure-pipelines/windows-release/gpg-sign.yml deleted file mode 100644 index 0855af8d703df9..00000000000000 --- a/.azure-pipelines/windows-release/gpg-sign.yml +++ /dev/null @@ -1,28 +0,0 @@ -parameters: - GPGKeyFile: $(GPGKey) - GPGPassphrase: $(GPGPassphrase) - Files: '*' - WorkingDirectory: $(Build.BinariesDirectory) - -steps: -- task: DownloadSecureFile@1 - name: gpgkey - inputs: - secureFile: ${{ parameters.GPGKeyFile }} - 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)" - (gci -File ${{ parameters.Files }}).FullName | %{ - gpg/gpg2.exe -ba --batch --passphrase ${{ parameters.GPGPassphrase }} $_ - "Made signature for $_" - } - displayName: 'Generate GPG signatures' - workingDirectory: ${{ parameters.WorkingDirectory }} - -- powershell: | - $p = gps "gpg-agent" -EA 0 - if ($p) { $p.Kill() } - displayName: 'Kill GPG agent' - condition: true diff --git a/.azure-pipelines/windows-release/layout-command.yml b/.azure-pipelines/windows-release/layout-command.yml deleted file mode 100644 index 406ccd859faa6a..00000000000000 --- a/.azure-pipelines/windows-release/layout-command.yml +++ /dev/null @@ -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' diff --git a/.azure-pipelines/windows-release/mingw-lib.yml b/.azure-pipelines/windows-release/mingw-lib.yml deleted file mode 100644 index 30f7d34fa61d23..00000000000000 --- 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 a460eb1bac8fe5..00000000000000 --- a/.azure-pipelines/windows-release/msi-steps.yml +++ /dev/null @@ -1,129 +0,0 @@ -steps: - - template: ./checkout.yml - - - 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 - contents: | - htmlhelp\*.chm - - - 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: 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 - - - 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 - %MSBUILD% Tools\msi\bundle\releaseweb.wixproj /t:Rebuild /p:RebuildAll=false - displayName: 'Build win32 installer' - env: - Platform: x86 - Py_OutDir: $(Build.BinariesDirectory) - PYTHON: $(Build.BinariesDirectory)\win32\python.exe - PYTHONHOME: $(Build.SourcesDirectory) - TclTkLibraryDir: $(Build.BinariesDirectory)\tcltk_lib_win32 - BuildForRelease: true - SuppressMinGWLib: true - - - script: | - %MSBUILD% Tools\msi\bundle\releaselocal.wixproj /t:Rebuild /p:RebuildAll=true - %MSBUILD% Tools\msi\bundle\releaseweb.wixproj /t:Rebuild /p:RebuildAll=false - displayName: 'Build amd64 installer' - env: - Platform: x64 - Py_OutDir: $(Build.BinariesDirectory) - PYTHON: $(Build.BinariesDirectory)\amd64\python.exe - PYTHONHOME: $(Build.SourcesDirectory) - TclTkLibraryDir: $(Build.BinariesDirectory)\tcltk_lib_amd64 - BuildForRelease: true - SuppressMinGWLib: true - - - task: CopyFiles@2 - displayName: 'Assemble artifact: msi (1/2)' - inputs: - sourceFolder: $(Build.BinariesDirectory)\win32\en-us - targetFolder: $(Build.ArtifactStagingDirectory)\msi\win32 - contents: | - *.msi - *.cab - *.exe - - - task: CopyFiles@2 - displayName: 'Assemble artifact: msi (2/2)' - inputs: - sourceFolder: $(Build.BinariesDirectory)\amd64\en-us - targetFolder: $(Build.ArtifactStagingDirectory)\msi\amd64 - contents: | - *.msi - *.cab - *.exe - - - task: PublishPipelineArtifact@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 69f3b1e16451ec..00000000000000 --- a/.azure-pipelines/windows-release/stage-build.yml +++ /dev/null @@ -1,179 +0,0 @@ -jobs: -- job: Build_Docs - displayName: Docs build - pool: - name: 'Windows Release' - #vmImage: windows-2019 - - 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' - env: - BUILDDIR: $(Build.BinariesDirectory)\Doc - - #- powershell: | - # mkdir -Force "$(Build.BinariesDirectory)\Doc\htmlhelp" - # iwr "https://www.python.org/ftp/python/3.8.0/python380.chm" -OutFile "$(Build.BinariesDirectory)\Doc\htmlhelp\python390a0.chm" - # displayName: 'Cheat at building CHM docs' - - - 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-2019 - - 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-2019 - - 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-2019 - - 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" - - - 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 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 dbccdead143b21..00000000000000 --- 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-2019 - - 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 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 8fc8da3e52fe03..00000000000000 --- a/.azure-pipelines/windows-release/stage-layout-full.yml +++ /dev/null @@ -1,75 +0,0 @@ -jobs: -- job: Make_Layouts - displayName: Make layouts - condition: and(succeeded(), eq(variables['DoLayout'], 'true')) - - pool: - vmImage: windows-2019 - - 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) - - 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) 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 def4f7d3c6bee5..00000000000000 --- a/.azure-pipelines/windows-release/stage-layout-msix.yml +++ /dev/null @@ -1,97 +0,0 @@ -jobs: -- job: Make_MSIX_Layout - displayName: Make MSIX layout - - pool: - vmImage: windows-2019 - - 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) - - 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) 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 41cdff850e83be..00000000000000 --- 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-2019 - - 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) diff --git a/.azure-pipelines/windows-release/stage-msi.yml b/.azure-pipelines/windows-release/stage-msi.yml deleted file mode 100644 index 9b965b09c14748..00000000000000 --- a/.azure-pipelines/windows-release/stage-msi.yml +++ /dev/null @@ -1,36 +0,0 @@ -jobs: -- job: Make_MSI - displayName: Make MSI - condition: and(succeeded(), not(variables['SigningCertificate'])) - - pool: - vmImage: windows-2019 - - 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 - -- 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 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 07e343a0b4e0c7..00000000000000 --- a/.azure-pipelines/windows-release/stage-pack-msix.yml +++ /dev/null @@ -1,137 +0,0 @@ -jobs: -- job: Pack_MSIX - displayName: Pack MSIX bundles - - pool: - vmImage: windows-2019 - - 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: - - checkout: none - - template: ./find-sdk.yml - - - task: DownloadBuildArtifacts@0 - displayName: 'Download Artifact: unsigned_msix' - inputs: - artifactName: unsigned_msix - downloadPath: $(Build.BinariesDirectory) - - - powershell: | - $failed = $true - foreach ($retry in 1..3) { - signtool sign /a /n "$(SigningCertificate)" /fd sha256 /t http://timestamp.verisign.com/scripts/timestamp.dll /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 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 b100364820d95b..00000000000000 --- a/.azure-pipelines/windows-release/stage-pack-nuget.yml +++ /dev/null @@ -1,43 +0,0 @@ -jobs: -- job: Pack_Nuget - displayName: Pack Nuget bundles - condition: and(succeeded(), eq(variables['DoNuget'], 'true')) - - pool: - vmImage: windows-2019 - - 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 - displayName: 'Create nuget package' - - - task: PublishBuildArtifacts@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 d5edf44ef5c2ec..00000000000000 --- a/.azure-pipelines/windows-release/stage-publish-nugetorg.yml +++ /dev/null @@ -1,46 +0,0 @@ -jobs: -- job: Publish_Nuget - displayName: Publish Nuget packages - condition: and(succeeded(), eq(variables['DoNuget'], 'true')) - - pool: - vmImage: windows-2019 - - workspace: - clean: all - - steps: - - checkout: none - - - task: DownloadBuildArtifacts@0 - displayName: 'Download artifact: nuget' - condition: and(succeeded(), not(variables['BuildToPublish'])) - inputs: - artifactName: nuget - downloadPath: $(Build.BinariesDirectory) - - - task: DownloadBuildArtifacts@0 - displayName: 'Download artifact: nuget' - condition: and(succeeded(), variables['BuildToPublish']) - inputs: - artifactName: nuget - downloadPath: $(Build.BinariesDirectory) - buildType: specific - project: cpython - pipeline: Windows-Release - buildVersionToDownload: specific - buildId: $(BuildToPublish) - - - powershell: 'gci pythonarm*.nupkg | %{ Write-Host "Not publishing: $($_.Name)"; gi $_ } | del' - displayName: 'Prevent publishing ARM/ARM64 packages' - workingDirectory: '$(Build.BinariesDirectory)\nuget' - condition: and(succeeded(), not(variables['PublishArmPackages'])) - - - 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' 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 4b88bdebf8cc41..00000000000000 --- a/.azure-pipelines/windows-release/stage-publish-pythonorg.yml +++ /dev/null @@ -1,158 +0,0 @@ -jobs: -- job: Publish_Python - displayName: Publish python.org packages - condition: and(succeeded(), and(eq(variables['DoMSI'], 'true'), eq(variables['DoEmbed'], 'true'))) - - pool: - #vmImage: windows-2019 - name: 'Windows Release' - - workspace: - clean: all - - steps: - - template: ./checkout.yml - - - task: UsePythonVersion@0 - displayName: 'Use Python 3.6 or later' - inputs: - versionSpec: '>=3.6' - - - task: DownloadPipelineArtifact@1 - displayName: 'Download artifact: Doc' - condition: and(succeeded(), not(variables['BuildToPublish'])) - inputs: - artifactName: Doc - targetPath: $(Build.BinariesDirectory)\Doc - - - task: DownloadPipelineArtifact@1 - displayName: 'Download artifact: msi' - condition: and(succeeded(), not(variables['BuildToPublish'])) - inputs: - artifactName: msi - targetPath: $(Build.BinariesDirectory)\msi - - - task: DownloadBuildArtifacts@0 - displayName: 'Download artifact: embed' - condition: and(succeeded(), not(variables['BuildToPublish'])) - inputs: - artifactName: embed - downloadPath: $(Build.BinariesDirectory) - - - task: DownloadPipelineArtifact@1 - displayName: 'Download artifact from $(BuildToPublish): Doc' - condition: and(succeeded(), variables['BuildToPublish']) - inputs: - artifactName: Doc - targetPath: $(Build.BinariesDirectory)\Doc - buildType: specific - project: cpython - pipeline: 21 - buildVersionToDownload: specific - buildId: $(BuildToPublish) - - - task: DownloadPipelineArtifact@1 - displayName: 'Download artifact from $(BuildToPublish): msi' - condition: and(succeeded(), variables['BuildToPublish']) - inputs: - artifactName: msi - targetPath: $(Build.BinariesDirectory)\msi - buildType: specific - project: cpython - pipeline: 21 - buildVersionToDownload: specific - buildId: $(BuildToPublish) - - - task: DownloadBuildArtifacts@0 - displayName: 'Download artifact from $(BuildToPublish): embed' - condition: and(succeeded(), variables['BuildToPublish']) - inputs: - artifactName: embed - downloadPath: $(Build.BinariesDirectory) - buildType: specific - project: cpython - pipeline: Windows-Release - buildVersionToDownload: specific - buildId: $(BuildToPublish) - - - powershell: 'gci *embed-arm*.zip | %{ Write-Host "Not publishing: $($_.Name)"; gi $_ } | del' - displayName: 'Prevent publishing ARM/ARM64 packages' - workingDirectory: '$(Build.BinariesDirectory)\embed' - condition: and(succeeded(), not(variables['PublishArmPackages'])) - - - - template: ./gpg-sign.yml - parameters: - GPGKeyFile: 'python-signing.key' - Files: 'doc\htmlhelp\*.chm, msi\*\*, embed\*.zip' - - - 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) - displayName: 'Purge CDN' - - - powershell: | - $failures = 0 - gci "msi\*\*-webinstall.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: | - $hashes = gci doc\htmlhelp\python*.chm, msi\*\*.exe, embed\*.zip | ` - 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:" - (gci msi\*\python*.asc, doc\htmlhelp\*.asc, embed\*.asc).FullName - $d = mkdir "$(Build.ArtifactStagingDirectory)\hashes" -Force - move msi\*\python*.asc, doc\htmlhelp\*.asc, embed\*.asc $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 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 e0512b95f27da8..00000000000000 --- a/.azure-pipelines/windows-release/stage-publish-store.yml +++ /dev/null @@ -1,35 +0,0 @@ -jobs: -- job: Publish_Store - displayName: Publish Store packages - condition: and(succeeded(), eq(variables['DoMSIX'], 'true')) - - pool: - vmImage: windows-2019 - - workspace: - clean: all - - steps: - - checkout: none - - - task: DownloadBuildArtifacts@0 - displayName: 'Download artifact: msixupload' - condition: and(succeeded(), not(variables['BuildToPublish'])) - inputs: - artifactName: msixupload - downloadPath: $(Build.BinariesDirectory) - - - task: DownloadBuildArtifacts@0 - displayName: 'Download artifact: msixupload' - condition: and(succeeded(), variables['BuildToPublish']) - inputs: - artifactName: msixupload - downloadPath: $(Build.BinariesDirectory) - buildType: specific - project: cpython - pipeline: Windows-Release - buildVersionToDownload: specific - buildId: $(BuildToPublish) - - # 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 4d757ae8fca032..00000000000000 --- a/.azure-pipelines/windows-release/stage-sign.yml +++ /dev/null @@ -1,124 +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: | - 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 /t http://timestamp.verisign.com/scripts/timestamp.dll $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 } | ` - 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-2019 - - 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 d99bd74722bacb..00000000000000 --- 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-2019 - - 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' 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 21e38c39590f70..00000000000000 --- 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-2019 - - workspace: - clean: all - - strategy: - matrix: - win32_User: - ExeMatch: 'python-[\dabrc.]+-webinstall\.exe' - Logs: $(Build.ArtifactStagingDirectory)\logs\win32_User - InstallAllUsers: 0 - win32_Machine: - ExeMatch: 'python-[\dabrc.]+-webinstall\.exe' - Logs: $(Build.ArtifactStagingDirectory)\logs\win32_Machine - InstallAllUsers: 1 - amd64_User: - ExeMatch: 'python-[\dabrc.]+-amd64-webinstall\.exe' - Logs: $(Build.ArtifactStagingDirectory)\logs\amd64_User - InstallAllUsers: 0 - amd64_Machine: - ExeMatch: 'python-[\dabrc.]+-amd64-webinstall\.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 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 94d815e95226ef..00000000000000 --- 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-2019 - - 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' diff --git a/.azure-pipelines/windows-steps.yml b/.azure-pipelines/windows-steps.yml deleted file mode 100644 index f502c40637c310..00000000000000 --- a/.azure-pipelines/windows-steps.yml +++ /dev/null @@ -1,37 +0,0 @@ -steps: -- checkout: self - clean: false - fetchDepth: 5 - -- powershell: | - # Relocate build outputs outside of source directory to make cleaning faster - Write-Host '##vso[task.setvariable variable=Py_IntDir]$(Build.BinariesDirectory)\obj' - # UNDONE: Do not build to a different directory because of broken tests - Write-Host '##vso[task.setvariable variable=Py_OutDir]$(Build.SourcesDirectory)\PCbuild' - #Write-Host '##vso[task.setvariable variable=Py_OutDir]$(Build.BinariesDirectory)\bin' - Write-Host '##vso[task.setvariable variable=EXTERNALS_DIR]$(Build.BinariesDirectory)\externals' - displayName: Update build locations - -- script: PCbuild\build.bat -e $(buildOpt) - displayName: 'Build CPython' - env: - IncludeUwp: true - -- script: python.bat -m test.pythoninfo - displayName: 'Display build info' - condition: and(succeeded(), variables['testRunPlatform']) - -- script: PCbuild\rt.bat -q -uall -u-cpu -rwW --slowest --timeout=1200 -j0 --junit-xml="$(Build.BinariesDirectory)\test-results.xml" --tempdir="$(Build.BinariesDirectory)\test" - displayName: 'Tests' - condition: and(succeeded(), variables['testRunPlatform']) - env: - PREFIX: $(Py_OutDir)\$(arch) - -- task: PublishTestResults@2 - displayName: 'Publish Test Results' - inputs: - testResultsFiles: '$(Build.BinariesDirectory)\test-results.xml' - mergeTestResults: true - testRunTitle: $(testRunTitle) - platform: $(testRunPlatform) - condition: and(succeededOrFailed(), variables['testRunPlatform']) diff --git a/Misc/NEWS.d/next/Tests/2020-03-03-18-08-58.bpo-39837.f1Bjge.rst b/Misc/NEWS.d/next/Tests/2020-03-03-18-08-58.bpo-39837.f1Bjge.rst new file mode 100644 index 00000000000000..7d79daa0e6cd03 --- /dev/null +++ b/Misc/NEWS.d/next/Tests/2020-03-03-18-08-58.bpo-39837.f1Bjge.rst @@ -0,0 +1,2 @@ +Remove the Azure Pipelines integration: now superseded by GitHub actions +which already runs the same jobs on Azure as well.