bpo-35683: Improve Azure Pipelines steps (GH-11493)

This commit is contained in:
Steve Dower 2019-01-22 10:49:52 -08:00 committed by GitHub
parent bf4ac2d2fd
commit 28f6cb34f6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
13 changed files with 147 additions and 165 deletions

View File

@ -2,6 +2,11 @@ variables:
manylinux: false manylinux: false
coverage: false coverage: false
resources:
containers:
- container: manylinux1
image: pyca/cryptography-manylinux1:x86_64
jobs: jobs:
- job: Prebuild - job: Prebuild
displayName: Pre-build checks displayName: Pre-build checks
@ -54,10 +59,12 @@ jobs:
variables: variables:
testRunTitle: '$(build.sourceBranchName)-linux' testRunTitle: '$(build.sourceBranchName)-linux'
testRunPlatform: linux testRunPlatform: linux
openssl_version: 1.1.0g openssl_version: 1.1.0j
steps: steps:
- template: ./posix-steps.yml - template: ./posix-steps.yml
parameters:
dependencies: apt
- job: ManyLinux1_CI_Tests - job: ManyLinux1_CI_Tests
@ -75,13 +82,20 @@ jobs:
pool: pool:
vmImage: ubuntu-16.04 vmImage: ubuntu-16.04
container: manylinux1
variables: variables:
testRunTitle: '$(build.sourceBranchName)-manylinux1' testRunTitle: '$(build.sourceBranchName)-manylinux1'
testRunPlatform: manylinux1 testRunPlatform: manylinux1
imageName: 'dockcross/manylinux-x64' openssl_version: ''
steps: steps:
- template: ./docker-steps.yml - template: ./posix-steps.yml
parameters:
dependencies: yum
sudo_dependencies: ''
xvfb: false
patchcheck: false
- job: Ubuntu_Coverage_CI_Tests - job: Ubuntu_Coverage_CI_Tests
@ -102,11 +116,12 @@ jobs:
variables: variables:
testRunTitle: '$(Build.SourceBranchName)-linux-coverage' testRunTitle: '$(Build.SourceBranchName)-linux-coverage'
testRunPlatform: linux-coverage testRunPlatform: linux-coverage
openssl_version: 1.1.0g openssl_version: 1.1.0j
steps: steps:
- template: ./posix-steps.yml - template: ./posix-steps.yml
parameters: parameters:
dependencies: apt
coverage: true coverage: true
@ -144,3 +159,4 @@ jobs:
- template: ./windows-layout-steps.yml - template: ./windows-layout-steps.yml
parameters: parameters:
kind: appx kind: appx
fulltest: true

View File

@ -1,76 +0,0 @@
steps:
- checkout: self
clean: true
fetchDepth: 5
- ${{ if ne(parameters.targetBranch, '') }}:
- script: |
git fetch -q origin ${{ parameters.targetbranch }}
if ! git diff --name-only HEAD $(git merge-base HEAD FETCH_HEAD) | grep -qvE '(\.rst$|^Doc|^Misc)'
then
echo "Only docs were updated, stopping build process."
echo "##vso[task.setvariable variable=DocOnly]true"
exit
fi
displayName: Detect doc-only changes
- task: docker@0
displayName: 'Configure CPython (debug)'
inputs:
action: 'Run an image'
imageName: $(imageName)
volumes: |
$(build.sourcesDirectory):/src
$(build.binariesDirectory):/build
workDir: '/src'
containerCommand: './configure --with-pydebug'
detached: false
condition: and(succeeded(), ne(variables['DocOnly'], 'true'))
- task: docker@0
displayName: 'Build CPython'
inputs:
action: 'Run an image'
imageName: $(imageName)
volumes: |
$(build.sourcesDirectory):/src
$(build.binariesDirectory):/build
workDir: '/src'
containerCommand: 'make -s -j4'
detached: false
condition: and(succeeded(), ne(variables['DocOnly'], 'true'))
- task: docker@0
displayName: 'Display build info'
inputs:
action: 'Run an image'
imageName: $(imageName)
volumes: |
$(build.sourcesDirectory):/src
$(build.binariesDirectory):/build
workDir: '/src'
containerCommand: 'make pythoninfo'
detached: false
condition: and(succeeded(), ne(variables['DocOnly'], 'true'))
- task: docker@0
displayName: 'Tests'
inputs:
action: 'Run an image'
imageName: $(imageName)
volumes: |
$(build.sourcesDirectory):/src
$(build.binariesDirectory):/build
workDir: '/src'
containerCommand: 'make buildbottest TESTOPTS="-j4 -uall,-cpu --junit-xml=/build/test-results.xml"'
detached: false
condition: and(succeeded(), ne(variables['DocOnly'], 'true'))
- task: PublishTestResults@2
displayName: 'Publish Test Results'
inputs:
testResultsFiles: '$(build.binariesDirectory)/test-results.xml'
mergeTestResults: true
testRunTitle: $(testRunTitle)
platform: $(testRunPlatform)
condition: and(succeededOrFailed(), ne(variables['DocOnly'], 'true'))

View File

@ -1,6 +1,6 @@
sudo apt-get update apt-get update
sudo apt-get -yq install \ apt-get -yq install \
build-essential \ build-essential \
zlib1g-dev \ zlib1g-dev \
libbz2-dev \ libbz2-dev \

View File

@ -1,12 +1,16 @@
parameters: parameters:
coverage: false coverage: false
sudo_dependencies: sudo
dependencies: apt
patchcheck: true
xvfb: true
steps: steps:
- checkout: self - checkout: self
clean: true clean: true
fetchDepth: 5 fetchDepth: 5
- script: ./.azure-pipelines/posix-deps.sh $(openssl_version) - script: ${{ parameters.sudo_dependencies }} ./.azure-pipelines/posix-deps-${{ parameters.dependencies }}.sh $(openssl_version)
displayName: 'Install dependencies' displayName: 'Install dependencies'
- script: ./configure --with-pydebug - script: ./configure --with-pydebug
@ -23,7 +27,7 @@ steps:
displayName: 'Display build info' displayName: 'Display build info'
- script: | - script: |
xvfb-run ./venv/bin/python -m coverage run --pylib -m test \ $COMMAND -m coverage run --pylib -m test \
--fail-env-changed \ --fail-env-changed \
-uall,-cpu \ -uall,-cpu \
--junit-xml=$(build.binariesDirectory)/test-results.xml \ --junit-xml=$(build.binariesDirectory)/test-results.xml \
@ -32,6 +36,11 @@ steps:
-x test_multiprocessing_spawn \ -x test_multiprocessing_spawn \
-x test_concurrent_futures -x test_concurrent_futures
displayName: 'Tests with coverage' 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 - script: ./venv/bin/python -m coverage xml
displayName: 'Generate coverage.xml' displayName: 'Generate coverage.xml'
@ -44,13 +53,18 @@ steps:
- script: make pythoninfo - script: make pythoninfo
displayName: 'Display build info' displayName: 'Display build info'
- script: xvfb-run make buildbottest TESTOPTS="-j4 -uall,-cpu --junit-xml=$(build.binariesDirectory)/test-results.xml" - script: $COMMAND buildbottest TESTOPTS="-j4 -uall,-cpu --junit-xml=$(build.binariesDirectory)/test-results.xml"
displayName: 'Tests' 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 - script: ./python Tools/scripts/patchcheck.py --travis true
displayName: 'Run patchcheck.py' displayName: 'Run patchcheck.py'
condition: and(succeeded(), eq(variables['Build.Reason'], 'PullRequest')) condition: and(succeeded(), eq(variables['Build.Reason'], 'PullRequest'))
- task: PublishTestResults@2 - task: PublishTestResults@2

View File

@ -1,3 +1,12 @@
variables:
manylinux: false
coverage: false
resources:
containers:
- container: manylinux1
image: pyca/cryptography-manylinux1:x86_64
jobs: jobs:
- job: Prebuild - job: Prebuild
displayName: Pre-build checks displayName: Pre-build checks
@ -50,12 +59,70 @@ jobs:
variables: variables:
testRunTitle: '$(system.pullRequest.TargetBranch)-linux' testRunTitle: '$(system.pullRequest.TargetBranch)-linux'
testRunPlatform: linux testRunPlatform: linux
openssl_version: 1.1.0g openssl_version: 1.1.0j
steps: steps:
- template: ./posix-steps.yml - template: ./posix-steps.yml
parameters: parameters:
targetBranch: $(System.PullRequest.TargetBranch) 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.0j
steps:
- template: ./posix-steps.yml
parameters:
dependencies: apt
coverage: true
- job: Windows_PR_Tests - job: Windows_PR_Tests

View File

@ -1,67 +0,0 @@
jobs:
- job: Prebuild
displayName: Pre-build checks
pool:
vmImage: ubuntu-16.04
steps:
- template: ./prebuild-checks.yml
- job: Windows_Appx_Tests
displayName: Windows Appx Tests
dependsOn: Prebuild
condition: and(succeeded(), eq(dependencies.Prebuild.outputs['tests.run'], 'true'))
pool:
vmImage: vs2017-win2016
strategy:
matrix:
win64:
arch: amd64
buildOpt: '-p x64'
testRunTitle: '$(Build.SourceBranchName)-win64-appx'
testRunPlatform: win64
maxParallel: 2
steps:
- checkout: self
clean: true
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=EXTERNALS_DIR]$(Build.BinariesDirectory)\externals'
displayName: Update build locations
- script: PCbuild\build.bat -e $(buildOpt)
displayName: 'Build CPython'
env:
IncludeUwp: true
- script: python.bat PC\layout -vv -s "$(Build.SourcesDirectory)" -b "$(Py_OutDir)\$(arch)" -t "$(Py_IntDir)\layout-tmp-$(arch)" --copy "$(Py_IntDir)\layout-$(arch)" --precompile --preset-appx --include-tests
displayName: 'Create APPX layout'
- script: .\python.exe -m test.pythoninfo
workingDirectory: $(Py_IntDir)\layout-$(arch)
displayName: 'Display build info'
- script: .\python.exe -m test -q -uall -u-cpu -rwW --slowest --timeout=1200 -j0 --junit-xml="$(Build.BinariesDirectory)\test-results.xml" --tempdir "$(Py_IntDir)\tmp-$(arch)"
workingDirectory: $(Py_IntDir)\layout-$(arch)
displayName: 'Tests'
env:
PREFIX: $(Py_IntDir)\layout-$(arch)
- task: PublishTestResults@2
displayName: 'Publish Test Results'
inputs:
testResultsFiles: '$(Build.BinariesDirectory)\test-results.xml'
mergeTestResults: true
testRunTitle: $(testRunTitle)
platform: $(testRunPlatform)
condition: succeededOrFailed()

View File

@ -1,11 +1,28 @@
parameters: parameters:
kind: nuget kind: nuget
extraOpts: --precompile extraOpts: --precompile
fulltest: false
steps: steps:
- script: .\python.bat PC\layout -vv -s "$(Build.SourcesDirectory)" -b "$(Py_OutDir)\$(arch)" -t "$(Py_IntDir)\layout-tmp-${{ parameters['kind'] }}-$(arch)" --copy "$(Py_OutDir)\layout-${{ parameters['kind'] }}-$(arch)" ${{ parameters['extraOpts'] }} --preset-${{ parameters['kind'] }} --include-tests - 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 displayName: Create ${{ parameters.kind }} layout
- script: .\python.exe -m test.pythoninfo - script: .\python.exe -m test.pythoninfo
workingDirectory: $(Py_OutDir)\layout-${{ parameters['kind'] }}-$(arch) workingDirectory: $(Build.BinariesDirectory)\layout-${{ parameters.kind }}-$(arch)
displayName: Show layout info (${{ parameters['kind'] }}) 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()

View File

@ -1,6 +1,6 @@
steps: steps:
- checkout: self - checkout: self
clean: true clean: false
fetchDepth: 5 fetchDepth: 5
- powershell: | - powershell: |
@ -8,6 +8,7 @@ steps:
Write-Host '##vso[task.setvariable variable=Py_IntDir]$(Build.BinariesDirectory)\obj' Write-Host '##vso[task.setvariable variable=Py_IntDir]$(Build.BinariesDirectory)\obj'
# UNDONE: Do not build to a different directory because of broken tests # 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.SourcesDirectory)\PCbuild'
#Write-Host '##vso[task.setvariable variable=Py_OutDir]$(Build.BinariesDirectory)\bin'
Write-Host '##vso[task.setvariable variable=EXTERNALS_DIR]$(Build.BinariesDirectory)\externals' Write-Host '##vso[task.setvariable variable=EXTERNALS_DIR]$(Build.BinariesDirectory)\externals'
displayName: Update build locations displayName: Update build locations

View File

@ -61,6 +61,8 @@ class LiveDialogTest(unittest.TestCase):
button.invoke() button.invoke()
get = dialog._current_textview.viewframe.textframe.text.get get = dialog._current_textview.viewframe.textframe.text.get
lines = printer._Printer__lines lines = printer._Printer__lines
if len(lines) < 2:
self.fail(name + ' full text was not found')
self.assertEqual(lines[0], get('1.0', '1.end')) self.assertEqual(lines[0], get('1.0', '1.end'))
self.assertEqual(lines[1], get('2.0', '2.end')) self.assertEqual(lines[1], get('2.0', '2.end'))
dialog._current_textview.destroy() dialog._current_textview.destroy()

View File

@ -1,5 +1,6 @@
import datetime import datetime
import faulthandler import faulthandler
import json
import locale import locale
import os import os
import platform import platform
@ -565,6 +566,9 @@ class Regrtest:
if self.ns.tempdir: if self.ns.tempdir:
TEMPDIR = self.ns.tempdir TEMPDIR = self.ns.tempdir
elif self.ns.worker_args:
ns_dict, _ = json.loads(self.ns.worker_args)
TEMPDIR = ns_dict.get("tempdir") or TEMPDIR
os.makedirs(TEMPDIR, exist_ok=True) os.makedirs(TEMPDIR, exist_ok=True)

View File

@ -2,6 +2,7 @@ import unittest
from test import support from test import support
import os import os
import sys import sys
import sysconfig
import subprocess import subprocess
@ -38,8 +39,8 @@ class TestSymbolGeneration(unittest.TestCase):
lines2 = fp.readlines() lines2 = fp.readlines()
self.assertEqual(lines1, lines2) self.assertEqual(lines1, lines2)
@unittest.skipIf(not os.path.exists(GRAMMAR_FILE), @unittest.skipUnless(sysconfig.is_python_build(),
'test only works from source build directory') 'test only works from source build directory')
def test_real_grammar_and_symbol_file(self): def test_real_grammar_and_symbol_file(self):
output = support.TESTFN output = support.TESTFN
self.addCleanup(support.unlink, output) self.addCleanup(support.unlink, output)

View File

@ -0,0 +1 @@
Improved Azure Pipelines build steps and now verifying layouts correctly

View File

@ -156,6 +156,8 @@ def get_layout(ns):
for dest, src in rglob(ns.build, "vcruntime*.dll"): for dest, src in rglob(ns.build, "vcruntime*.dll"):
yield dest, src yield dest, src
yield "LICENSE.txt", ns.source / "LICENSE"
for dest, src in rglob(ns.build, ("*.pyd", "*.dll")): for dest, src in rglob(ns.build, ("*.pyd", "*.dll")):
if src.stem.endswith("_d") != bool(ns.debug) and src not in REQUIRED_DLLS: if src.stem.endswith("_d") != bool(ns.debug) and src not in REQUIRED_DLLS:
continue continue