mirror of
https://github.com/python/cpython
synced 2024-09-16 04:39:56 +00:00
bpo-33522: Enable CI builds on Visual Studio Team Services (#6865)
This commit is contained in:
parent
713a936736
commit
e5f41d2f1e
43
.vsts/docs-release.yml
Normal file
43
.vsts/docs-release.yml
Normal file
|
@ -0,0 +1,43 @@
|
||||||
|
# Current docs for the syntax of this file are at:
|
||||||
|
# https://github.com/Microsoft/vsts-agent/blob/master/docs/preview/yamlgettingstarted.md
|
||||||
|
|
||||||
|
name: $(BuildDefinitionName)_$(Date:yyyyMMdd)$(Rev:.rr)
|
||||||
|
|
||||||
|
queue:
|
||||||
|
name: Hosted Linux Preview
|
||||||
|
|
||||||
|
#variables:
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- checkout: self
|
||||||
|
clean: true
|
||||||
|
fetchDepth: 5
|
||||||
|
|
||||||
|
- script: sudo apt-get update && sudo apt-get install -qy --force-yes texlive-full
|
||||||
|
displayName: 'Install LaTeX'
|
||||||
|
|
||||||
|
- task: UsePythonVersion@0
|
||||||
|
displayName: 'Use Python 3.6 or later'
|
||||||
|
inputs:
|
||||||
|
versionSpec: '>=3.6'
|
||||||
|
|
||||||
|
- script: python -m pip install sphinx blurb python-docs-theme
|
||||||
|
displayName: 'Install build dependencies'
|
||||||
|
|
||||||
|
- script: make dist PYTHON=python SPHINXBUILD='python -m sphinx' BLURB='python -m blurb'
|
||||||
|
workingDirectory: '$(build.sourcesDirectory)/Doc'
|
||||||
|
displayName: 'Build documentation'
|
||||||
|
|
||||||
|
- task: PublishBuildArtifacts@1
|
||||||
|
displayName: 'Publish build'
|
||||||
|
inputs:
|
||||||
|
PathToPublish: '$(build.sourcesDirectory)/Doc/build'
|
||||||
|
ArtifactName: build
|
||||||
|
publishLocation: Container
|
||||||
|
|
||||||
|
- task: PublishBuildArtifacts@1
|
||||||
|
displayName: 'Publish dist'
|
||||||
|
inputs:
|
||||||
|
PathToPublish: '$(build.sourcesDirectory)/Doc/dist'
|
||||||
|
ArtifactName: dist
|
||||||
|
publishLocation: Container
|
43
.vsts/docs.yml
Normal file
43
.vsts/docs.yml
Normal file
|
@ -0,0 +1,43 @@
|
||||||
|
# Current docs for the syntax of this file are at:
|
||||||
|
# https://github.com/Microsoft/vsts-agent/blob/master/docs/preview/yamlgettingstarted.md
|
||||||
|
|
||||||
|
name: $(BuildDefinitionName)_$(Date:yyyyMMdd)$(Rev:.rr)
|
||||||
|
|
||||||
|
queue:
|
||||||
|
name: Hosted Linux Preview
|
||||||
|
|
||||||
|
trigger:
|
||||||
|
branches:
|
||||||
|
include:
|
||||||
|
- master
|
||||||
|
- 3.7
|
||||||
|
- 3.6
|
||||||
|
paths:
|
||||||
|
include:
|
||||||
|
- Doc/*
|
||||||
|
|
||||||
|
#variables:
|
||||||
|
|
||||||
|
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~=1.6.1 blurb python-docs-theme
|
||||||
|
displayName: 'Install build dependencies'
|
||||||
|
|
||||||
|
- script: make check suspicious html PYTHON=python
|
||||||
|
workingDirectory: '$(build.sourcesDirectory)/Doc'
|
||||||
|
displayName: 'Build documentation'
|
||||||
|
|
||||||
|
- task: PublishBuildArtifacts@1
|
||||||
|
displayName: 'Publish build'
|
||||||
|
inputs:
|
||||||
|
PathToPublish: '$(build.sourcesDirectory)/Doc/build'
|
||||||
|
ArtifactName: build
|
||||||
|
publishLocation: Container
|
71
.vsts/linux-buildbot.yml
Normal file
71
.vsts/linux-buildbot.yml
Normal file
|
@ -0,0 +1,71 @@
|
||||||
|
# Current docs for the syntax of this file are at:
|
||||||
|
# https://github.com/Microsoft/vsts-agent/blob/master/docs/preview/yamlgettingstarted.md
|
||||||
|
|
||||||
|
name: $(BuildDefinitionName)_$(Date:yyyyMMdd)$(Rev:.rr)
|
||||||
|
|
||||||
|
queue:
|
||||||
|
name: Hosted Linux Preview
|
||||||
|
|
||||||
|
trigger:
|
||||||
|
branches:
|
||||||
|
include:
|
||||||
|
- master
|
||||||
|
- 3.7
|
||||||
|
- 3.6
|
||||||
|
paths:
|
||||||
|
exclude:
|
||||||
|
- Doc/*
|
||||||
|
- Tools/*
|
||||||
|
|
||||||
|
variables:
|
||||||
|
# Copy-pasted from linux-deps.yml until template support arrives
|
||||||
|
OPENSSL: 1.1.0g
|
||||||
|
OPENSSL_DIR: "$(build.sourcesDirectory)/multissl/openssl/$(OPENSSL)"
|
||||||
|
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- checkout: self
|
||||||
|
clean: true
|
||||||
|
fetchDepth: 5
|
||||||
|
|
||||||
|
#- template: linux-deps.yml
|
||||||
|
|
||||||
|
# See https://github.com/Microsoft/vsts-agent/blob/master/docs/preview/yamlgettingstarted-templates.md
|
||||||
|
# For now, we copy/paste the steps
|
||||||
|
- script: echo "deb-src http://archive.ubuntu.com/ubuntu/ xenial main" > /etc/apt/sources.list.d/python.list && sudo apt-get update
|
||||||
|
displayName: 'Update apt-get lists'
|
||||||
|
|
||||||
|
- script: echo ##vso[task.prependpath]$(OPENSSL_DIR)
|
||||||
|
displayName: 'Add $(OPENSSL_DIR) to PATH'
|
||||||
|
- script: >
|
||||||
|
sudo 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
|
||||||
|
displayName: 'Install dependencies'
|
||||||
|
- script: python3 Tools/ssl/multissltests.py --steps=library --base-directory $(build.sourcesDirectory)/multissl --openssl $(OPENSSL) --system Linux
|
||||||
|
displayName: 'python multissltests.py'
|
||||||
|
|
||||||
|
- script: ./configure --with-pydebug
|
||||||
|
displayName: 'Configure CPython (debug)'
|
||||||
|
|
||||||
|
- script: make -s -j4
|
||||||
|
displayName: 'Build CPython'
|
||||||
|
|
||||||
|
- script: make pythoninfo
|
||||||
|
displayName: 'Display build info'
|
||||||
|
|
||||||
|
- script: make buildbottest TESTOPTS="-j4 -uall,-cpu"
|
||||||
|
displayName: 'Tests'
|
77
.vsts/linux-coverage.yml
Normal file
77
.vsts/linux-coverage.yml
Normal file
|
@ -0,0 +1,77 @@
|
||||||
|
# Current docs for the syntax of this file are at:
|
||||||
|
# https://github.com/Microsoft/vsts-agent/blob/master/docs/preview/yamlgettingstarted.md
|
||||||
|
|
||||||
|
name: $(BuildDefinitionName)_$(Date:yyyyMMdd)$(Rev:.rr)
|
||||||
|
|
||||||
|
queue:
|
||||||
|
name: Hosted Linux Preview
|
||||||
|
|
||||||
|
trigger:
|
||||||
|
branches:
|
||||||
|
include:
|
||||||
|
- master
|
||||||
|
- 3.7
|
||||||
|
- 3.6
|
||||||
|
paths:
|
||||||
|
exclude:
|
||||||
|
- Doc/*
|
||||||
|
- Tools/*
|
||||||
|
|
||||||
|
variables:
|
||||||
|
# Copy-pasted from linux-deps.yml until template support arrives
|
||||||
|
OPENSSL: 1.1.0g
|
||||||
|
OPENSSL_DIR: "$(build.sourcesDirectory)/multissl/openssl/$(OPENSSL)"
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- checkout: self
|
||||||
|
clean: true
|
||||||
|
fetchDepth: 5
|
||||||
|
|
||||||
|
#- template: linux-deps.yml
|
||||||
|
|
||||||
|
# See https://github.com/Microsoft/vsts-agent/blob/master/docs/preview/yamlgettingstarted-templates.md
|
||||||
|
# For now, we copy/paste the steps
|
||||||
|
- script: echo "deb-src http://archive.ubuntu.com/ubuntu/ xenial main" > /etc/apt/sources.list.d/python.list && sudo apt-get update
|
||||||
|
displayName: 'Update apt-get lists'
|
||||||
|
|
||||||
|
- script: echo ##vso[task.prependpath]$(OPENSSL_DIR)
|
||||||
|
displayName: 'Add $(OPENSSL_DIR) to PATH'
|
||||||
|
- script: >
|
||||||
|
sudo 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
|
||||||
|
displayName: 'Install dependencies'
|
||||||
|
- script: python3 Tools/ssl/multissltests.py --steps=library --base-directory $(build.sourcesDirectory)/multissl --openssl $(OPENSSL) --system Linux
|
||||||
|
displayName: 'python multissltests.py'
|
||||||
|
|
||||||
|
|
||||||
|
- script: ./configure --with-pydebug
|
||||||
|
displayName: 'Configure CPython (debug)'
|
||||||
|
|
||||||
|
- script: make -s -j4
|
||||||
|
displayName: 'Build CPython'
|
||||||
|
|
||||||
|
- 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: ./venv/bin/python -m coverage run --pylib -m test --fail-env-changed -uall,-cpu -x test_multiprocessing_fork -x test_multiprocessing_forkserver -x test_multiprocessing_spawn -x test_concurrent_futures
|
||||||
|
displayName: 'Tests with coverage'
|
||||||
|
|
||||||
|
- script: source ./venv/bin/activate && bash <(curl -s https://codecov.io/bash)
|
||||||
|
displayName: 'Publish code coverage results'
|
36
.vsts/linux-deps.yml
Normal file
36
.vsts/linux-deps.yml
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
# Note: this file is not currently used, but when template support comes to VSTS it
|
||||||
|
# will be referenced from the other scripts..
|
||||||
|
|
||||||
|
# Current docs for the syntax of this file are at:
|
||||||
|
# https://github.com/Microsoft/vsts-agent/blob/master/docs/preview/yamlgettingstarted.md
|
||||||
|
|
||||||
|
parameters:
|
||||||
|
OPENSSL: 1.1.0g
|
||||||
|
OPENSSL_DIR: "$(build.sourcesDirectory)/multissl/openssl/$(OPENSSL)"
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- script: echo "deb-src http://archive.ubuntu.com/ubuntu/ xenial main" > /etc/apt/sources.list.d/python.list && sudo apt-get update
|
||||||
|
displayName: 'Update apt-get lists'
|
||||||
|
|
||||||
|
- script: echo ##vso[task.prependpath]$(OPENSSL_DIR)
|
||||||
|
displayName: 'Add $(OPENSSL_DIR) to PATH'
|
||||||
|
- script: >
|
||||||
|
sudo 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
|
||||||
|
displayName: 'Install dependencies'
|
||||||
|
- script: python3 Tools/ssl/multissltests.py --steps=library --base-directory $(build.sourcesDirectory)/multissl --openssl $(OPENSSL) --system Linux
|
||||||
|
displayName: 'python multissltests.py'
|
75
.vsts/linux-pr.yml
Normal file
75
.vsts/linux-pr.yml
Normal file
|
@ -0,0 +1,75 @@
|
||||||
|
# Current docs for the syntax of this file are at:
|
||||||
|
# https://github.com/Microsoft/vsts-agent/blob/master/docs/preview/yamlgettingstarted.md
|
||||||
|
|
||||||
|
name: $(BuildDefinitionName)_$(Date:yyyyMMdd)$(Rev:.rr)
|
||||||
|
|
||||||
|
queue:
|
||||||
|
name: Hosted Linux Preview
|
||||||
|
|
||||||
|
trigger:
|
||||||
|
branches:
|
||||||
|
include:
|
||||||
|
- master
|
||||||
|
- 3.7
|
||||||
|
- 3.6
|
||||||
|
paths:
|
||||||
|
exclude:
|
||||||
|
- Doc/*
|
||||||
|
- Tools/*
|
||||||
|
|
||||||
|
variables:
|
||||||
|
# Copy-pasted from linux-deps.yml until template support arrives
|
||||||
|
OPENSSL: 1.1.0g
|
||||||
|
OPENSSL_DIR: "$(build.sourcesDirectory)/multissl/openssl/$(OPENSSL)"
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- checkout: self
|
||||||
|
clean: true
|
||||||
|
fetchDepth: 5
|
||||||
|
|
||||||
|
#- template: linux-deps.yml
|
||||||
|
|
||||||
|
# See https://github.com/Microsoft/vsts-agent/blob/master/docs/preview/yamlgettingstarted-templates.md
|
||||||
|
# For now, we copy/paste the steps
|
||||||
|
- script: echo "deb-src http://archive.ubuntu.com/ubuntu/ xenial main" > /etc/apt/sources.list.d/python.list && sudo apt-get update
|
||||||
|
displayName: 'Update apt-get lists'
|
||||||
|
|
||||||
|
- script: echo ##vso[task.prependpath]$(OPENSSL_DIR)
|
||||||
|
displayName: 'Add $(OPENSSL_DIR) to PATH'
|
||||||
|
- script: >
|
||||||
|
sudo 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
|
||||||
|
displayName: 'Install dependencies'
|
||||||
|
- script: python3 Tools/ssl/multissltests.py --steps=library --base-directory $(build.sourcesDirectory)/multissl --openssl $(OPENSSL) --system Linux
|
||||||
|
displayName: 'python multissltests.py'
|
||||||
|
|
||||||
|
|
||||||
|
- script: ./configure --with-pydebug
|
||||||
|
displayName: 'Configure CPython (debug)'
|
||||||
|
|
||||||
|
- script: make -s -j4
|
||||||
|
displayName: 'Build CPython'
|
||||||
|
|
||||||
|
- script: make pythoninfo
|
||||||
|
displayName: 'Display build info'
|
||||||
|
|
||||||
|
# Run patchcheck and fail if anything is discovered
|
||||||
|
- script: ./python Tools/scripts/patchcheck.py --travis true
|
||||||
|
displayName: 'Run patchcheck.py'
|
||||||
|
|
||||||
|
- script: make buildbottest TESTOPTS="-j4 -uall,-cpu"
|
||||||
|
displayName: 'Tests'
|
37
.vsts/macos-buildbot.yml
Normal file
37
.vsts/macos-buildbot.yml
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
# Current docs for the syntax of this file are at:
|
||||||
|
# https://github.com/Microsoft/vsts-agent/blob/master/docs/preview/yamlgettingstarted.md
|
||||||
|
|
||||||
|
name: $(BuildDefinitionName)_$(Date:yyyyMMdd)$(Rev:.rr)
|
||||||
|
|
||||||
|
queue:
|
||||||
|
name: Hosted macOS Preview
|
||||||
|
|
||||||
|
trigger:
|
||||||
|
branches:
|
||||||
|
include:
|
||||||
|
- master
|
||||||
|
- 3.7
|
||||||
|
- 3.6
|
||||||
|
paths:
|
||||||
|
exclude:
|
||||||
|
- Doc/*
|
||||||
|
- Tools/*
|
||||||
|
|
||||||
|
#variables:
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- checkout: self
|
||||||
|
clean: true
|
||||||
|
fetchDepth: 5
|
||||||
|
|
||||||
|
- script: ./configure --with-pydebug --with-openssl=/usr/local/opt/openssl
|
||||||
|
displayName: 'Configure CPython (debug)'
|
||||||
|
|
||||||
|
- script: make -s -j4
|
||||||
|
displayName: 'Build CPython'
|
||||||
|
|
||||||
|
- script: make pythoninfo
|
||||||
|
displayName: 'Display build info'
|
||||||
|
|
||||||
|
- script: make buildbottest TESTOPTS="-j4 -uall,-cpu"
|
||||||
|
displayName: 'Tests'
|
37
.vsts/macos-pr.yml
Normal file
37
.vsts/macos-pr.yml
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
# Current docs for the syntax of this file are at:
|
||||||
|
# https://github.com/Microsoft/vsts-agent/blob/master/docs/preview/yamlgettingstarted.md
|
||||||
|
|
||||||
|
name: $(BuildDefinitionName)_$(Date:yyyyMMdd)$(Rev:.rr)
|
||||||
|
|
||||||
|
queue:
|
||||||
|
name: Hosted macOS Preview
|
||||||
|
|
||||||
|
trigger:
|
||||||
|
branches:
|
||||||
|
include:
|
||||||
|
- master
|
||||||
|
- 3.7
|
||||||
|
- 3.6
|
||||||
|
paths:
|
||||||
|
exclude:
|
||||||
|
- Doc/*
|
||||||
|
- Tools/*
|
||||||
|
|
||||||
|
#variables:
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- checkout: self
|
||||||
|
clean: true
|
||||||
|
fetchDepth: 5
|
||||||
|
|
||||||
|
- script: ./configure --with-pydebug --with-openssl=/usr/local/opt/openssl
|
||||||
|
displayName: 'Configure CPython (debug)'
|
||||||
|
|
||||||
|
- script: make -s -j4
|
||||||
|
displayName: 'Build CPython'
|
||||||
|
|
||||||
|
- script: make pythoninfo
|
||||||
|
displayName: 'Display build info'
|
||||||
|
|
||||||
|
- script: make buildbottest TESTOPTS="-j4 -uall,-cpu"
|
||||||
|
displayName: 'Tests'
|
49
.vsts/windows-buildbot.yml
Normal file
49
.vsts/windows-buildbot.yml
Normal file
|
@ -0,0 +1,49 @@
|
||||||
|
# Current docs for the syntax of this file are at:
|
||||||
|
# https://github.com/Microsoft/vsts-agent/blob/master/docs/preview/yamlgettingstarted.md
|
||||||
|
|
||||||
|
name: $(BuildDefinitionName)_$(Date:yyyyMMdd)$(Rev:.rr)
|
||||||
|
|
||||||
|
queue:
|
||||||
|
name: Hosted VS2017
|
||||||
|
parallel: 2
|
||||||
|
matrix:
|
||||||
|
amd64:
|
||||||
|
buildOpt: -p x64
|
||||||
|
outDirSuffix: amd64
|
||||||
|
win32:
|
||||||
|
buildOpt:
|
||||||
|
outDirSuffix: win32
|
||||||
|
|
||||||
|
trigger:
|
||||||
|
branches:
|
||||||
|
include:
|
||||||
|
- master
|
||||||
|
- 3.7
|
||||||
|
- 3.6
|
||||||
|
paths:
|
||||||
|
exclude:
|
||||||
|
- Doc/*
|
||||||
|
- Tools/*
|
||||||
|
|
||||||
|
variables:
|
||||||
|
# Relocate build outputs outside of source directory to make cleaning faster
|
||||||
|
Py_IntDir: $(Build.BinariesDirectory)\obj
|
||||||
|
# UNDONE: Do not build to a different directory because of broken tests
|
||||||
|
Py_OutDir: $(Build.SourcesDirectory)\PCbuild
|
||||||
|
EXTERNAL_DIR: $(Build.BinariesDirectory)\externals
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- checkout: self
|
||||||
|
clean: true
|
||||||
|
fetchDepth: 5
|
||||||
|
|
||||||
|
- script: PCbuild\build.bat -e $(buildOpt)
|
||||||
|
displayName: 'Build CPython'
|
||||||
|
|
||||||
|
- script: python.bat -m test.pythoninfo
|
||||||
|
displayName: 'Display build info'
|
||||||
|
|
||||||
|
- script: PCbuild\rt.bat -q -uall -u-cpu -rwW --slowest --timeout=1200 -j0
|
||||||
|
displayName: 'Tests'
|
||||||
|
env:
|
||||||
|
PREFIX: $(Py_OutDir)\$(outDirSuffix)
|
49
.vsts/windows-pr.yml
Normal file
49
.vsts/windows-pr.yml
Normal file
|
@ -0,0 +1,49 @@
|
||||||
|
# Current docs for the syntax of this file are at:
|
||||||
|
# https://github.com/Microsoft/vsts-agent/blob/master/docs/preview/yamlgettingstarted.md
|
||||||
|
|
||||||
|
name: $(BuildDefinitionName)_$(Date:yyyyMMdd)$(Rev:.rr)
|
||||||
|
|
||||||
|
queue:
|
||||||
|
name: Hosted VS2017
|
||||||
|
parallel: 2
|
||||||
|
matrix:
|
||||||
|
amd64:
|
||||||
|
buildOpt: -p x64
|
||||||
|
outDirSuffix: amd64
|
||||||
|
win32:
|
||||||
|
buildOpt:
|
||||||
|
outDirSuffix: win32
|
||||||
|
|
||||||
|
trigger:
|
||||||
|
branches:
|
||||||
|
include:
|
||||||
|
- master
|
||||||
|
- 3.7
|
||||||
|
- 3.6
|
||||||
|
paths:
|
||||||
|
exclude:
|
||||||
|
- Doc/*
|
||||||
|
- Tools/*
|
||||||
|
|
||||||
|
variables:
|
||||||
|
# Relocate build outputs outside of source directory to make cleaning faster
|
||||||
|
Py_IntDir: $(Build.BinariesDirectory)\obj
|
||||||
|
# UNDONE: Do not build to a different directory because of broken tests
|
||||||
|
Py_OutDir: $(Build.SourcesDirectory)\PCbuild
|
||||||
|
EXTERNAL_DIR: $(Build.BinariesDirectory)\externals
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- checkout: self
|
||||||
|
clean: true
|
||||||
|
fetchDepth: 5
|
||||||
|
|
||||||
|
- script: PCbuild\build.bat -e $(buildOpt)
|
||||||
|
displayName: 'Build CPython'
|
||||||
|
|
||||||
|
- script: python.bat -m test.pythoninfo
|
||||||
|
displayName: 'Display build info'
|
||||||
|
|
||||||
|
- script: PCbuild\rt.bat -q -uall -u-cpu -rwW --slowest --timeout=1200 -j0
|
||||||
|
displayName: 'Tests'
|
||||||
|
env:
|
||||||
|
PREFIX: $(Py_OutDir)\$(outDirSuffix)
|
10
Doc/make.bat
10
Doc/make.bat
|
@ -6,17 +6,20 @@ pushd %~dp0
|
||||||
set this=%~n0
|
set this=%~n0
|
||||||
|
|
||||||
call ..\PCbuild\find_python.bat %PYTHON%
|
call ..\PCbuild\find_python.bat %PYTHON%
|
||||||
if not defined SPHINXBUILD if defined PYTHON (
|
|
||||||
|
if not defined PYTHON set PYTHON=py
|
||||||
|
|
||||||
|
if not defined SPHINXBUILD (
|
||||||
%PYTHON% -c "import sphinx" > nul 2> nul
|
%PYTHON% -c "import sphinx" > nul 2> nul
|
||||||
if errorlevel 1 (
|
if errorlevel 1 (
|
||||||
echo Installing sphinx with %PYTHON%
|
echo Installing sphinx with %PYTHON%
|
||||||
%PYTHON% -m pip install sphinx
|
%PYTHON% -m pip install sphinx python-docs-theme
|
||||||
if errorlevel 1 exit /B
|
if errorlevel 1 exit /B
|
||||||
)
|
)
|
||||||
set SPHINXBUILD=%PYTHON% -c "import sphinx, sys; sys.argv[0] = 'sphinx-build'; sphinx.main()"
|
set SPHINXBUILD=%PYTHON% -c "import sphinx, sys; sys.argv[0] = 'sphinx-build'; sphinx.main()"
|
||||||
)
|
)
|
||||||
|
|
||||||
if not defined BLURB if defined PYTHON (
|
if not defined BLURB (
|
||||||
%PYTHON% -c "import blurb" > nul 2> nul
|
%PYTHON% -c "import blurb" > nul 2> nul
|
||||||
if errorlevel 1 (
|
if errorlevel 1 (
|
||||||
echo Installing blurb with %PYTHON%
|
echo Installing blurb with %PYTHON%
|
||||||
|
@ -26,7 +29,6 @@ if not defined BLURB if defined PYTHON (
|
||||||
set BLURB=%PYTHON% -m blurb
|
set BLURB=%PYTHON% -m blurb
|
||||||
)
|
)
|
||||||
|
|
||||||
if not defined PYTHON set PYTHON=py
|
|
||||||
if not defined SPHINXBUILD set SPHINXBUILD=sphinx-build
|
if not defined SPHINXBUILD set SPHINXBUILD=sphinx-build
|
||||||
if not defined BLURB set BLURB=blurb
|
if not defined BLURB set BLURB=blurb
|
||||||
|
|
||||||
|
|
|
@ -169,7 +169,9 @@ def _candidate_tempdir_list():
|
||||||
|
|
||||||
# Failing that, try OS-specific locations.
|
# Failing that, try OS-specific locations.
|
||||||
if _os.name == 'nt':
|
if _os.name == 'nt':
|
||||||
dirlist.extend([ r'c:\temp', r'c:\tmp', r'\temp', r'\tmp' ])
|
dirlist.extend([ _os.path.expanduser(r'~\AppData\Local\Temp'),
|
||||||
|
_os.path.expandvars(r'%SYSTEMROOT%\Temp'),
|
||||||
|
r'c:\temp', r'c:\tmp', r'\temp', r'\tmp' ])
|
||||||
else:
|
else:
|
||||||
dirlist.extend([ '/tmp', '/var/tmp', '/usr/tmp' ])
|
dirlist.extend([ '/tmp', '/var/tmp', '/usr/tmp' ])
|
||||||
|
|
||||||
|
|
|
@ -363,6 +363,20 @@ def _rmtree_inner(path):
|
||||||
_force_run(fullname, os.unlink, fullname)
|
_force_run(fullname, os.unlink, fullname)
|
||||||
_waitfor(_rmtree_inner, path, waitall=True)
|
_waitfor(_rmtree_inner, path, waitall=True)
|
||||||
_waitfor(lambda p: _force_run(p, os.rmdir, p), path)
|
_waitfor(lambda p: _force_run(p, os.rmdir, p), path)
|
||||||
|
|
||||||
|
def _longpath(path):
|
||||||
|
try:
|
||||||
|
import ctypes
|
||||||
|
except ImportError:
|
||||||
|
# No ctypes means we can't expands paths.
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
buffer = ctypes.create_unicode_buffer(len(path) * 2)
|
||||||
|
length = ctypes.windll.kernel32.GetLongPathNameW(path, buffer,
|
||||||
|
len(buffer))
|
||||||
|
if length:
|
||||||
|
return buffer[:length]
|
||||||
|
return path
|
||||||
else:
|
else:
|
||||||
_unlink = os.unlink
|
_unlink = os.unlink
|
||||||
_rmdir = os.rmdir
|
_rmdir = os.rmdir
|
||||||
|
@ -389,6 +403,9 @@ def _rmtree_inner(path):
|
||||||
_rmtree_inner(path)
|
_rmtree_inner(path)
|
||||||
os.rmdir(path)
|
os.rmdir(path)
|
||||||
|
|
||||||
|
def _longpath(path):
|
||||||
|
return path
|
||||||
|
|
||||||
def unlink(filename):
|
def unlink(filename):
|
||||||
try:
|
try:
|
||||||
_unlink(filename)
|
_unlink(filename)
|
||||||
|
@ -2381,13 +2398,15 @@ def can_xattr():
|
||||||
if not hasattr(os, "setxattr"):
|
if not hasattr(os, "setxattr"):
|
||||||
can = False
|
can = False
|
||||||
else:
|
else:
|
||||||
tmp_fp, tmp_name = tempfile.mkstemp()
|
tmp_dir = tempfile.mkdtemp()
|
||||||
|
tmp_fp, tmp_name = tempfile.mkstemp(dir=tmp_dir)
|
||||||
try:
|
try:
|
||||||
with open(TESTFN, "wb") as fp:
|
with open(TESTFN, "wb") as fp:
|
||||||
try:
|
try:
|
||||||
# TESTFN & tempfile may use different file systems with
|
# TESTFN & tempfile may use different file systems with
|
||||||
# different capabilities
|
# different capabilities
|
||||||
os.setxattr(tmp_fp, b"user.test", b"")
|
os.setxattr(tmp_fp, b"user.test", b"")
|
||||||
|
os.setxattr(tmp_name, b"trusted.foo", b"42")
|
||||||
os.setxattr(fp.fileno(), b"user.test", b"")
|
os.setxattr(fp.fileno(), b"user.test", b"")
|
||||||
# Kernels < 2.6.39 don't respect setxattr flags.
|
# Kernels < 2.6.39 don't respect setxattr flags.
|
||||||
kernel_version = platform.release()
|
kernel_version = platform.release()
|
||||||
|
@ -2398,6 +2417,7 @@ def can_xattr():
|
||||||
finally:
|
finally:
|
||||||
unlink(TESTFN)
|
unlink(TESTFN)
|
||||||
unlink(tmp_name)
|
unlink(tmp_name)
|
||||||
|
rmdir(tmp_dir)
|
||||||
_can_xattr = can
|
_can_xattr = can
|
||||||
return can
|
return can
|
||||||
|
|
||||||
|
|
|
@ -1848,10 +1848,22 @@ def run_loop(self, coro):
|
||||||
def prepare(self):
|
def prepare(self):
|
||||||
sock = self.make_socket()
|
sock = self.make_socket()
|
||||||
proto = self.MyProto(self.loop)
|
proto = self.MyProto(self.loop)
|
||||||
port = support.find_unused_port()
|
af = socket.AF_UNSPEC if support.IPV6_ENABLED else socket.AF_INET
|
||||||
server = self.run_loop(self.loop.create_server(
|
server = self.run_loop(self.loop.create_server(
|
||||||
lambda: proto, support.HOST, port))
|
lambda: proto, support.HOST, 0, family=af))
|
||||||
self.run_loop(self.loop.sock_connect(sock, (support.HOST, port)))
|
port = server.sockets[0].getsockname()[1]
|
||||||
|
|
||||||
|
for _ in range(10):
|
||||||
|
try:
|
||||||
|
self.run_loop(self.loop.sock_connect(sock, (support.HOST, port)))
|
||||||
|
except OSError:
|
||||||
|
time.sleep(0.5)
|
||||||
|
continue
|
||||||
|
else:
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
# One last try, so we get the exception
|
||||||
|
self.run_loop(self.loop.sock_connect(sock, (support.HOST, port)))
|
||||||
|
|
||||||
def cleanup():
|
def cleanup():
|
||||||
server.close()
|
server.close()
|
||||||
|
|
|
@ -417,15 +417,17 @@ def __init__(self, test_case, skip=None):
|
||||||
self.dry_run = test_case.dry_run
|
self.dry_run = test_case.dry_run
|
||||||
self.tracer = Tracer(test_case.expect_set, skip=skip,
|
self.tracer = Tracer(test_case.expect_set, skip=skip,
|
||||||
dry_run=self.dry_run, test_case=test_case.id())
|
dry_run=self.dry_run, test_case=test_case.id())
|
||||||
|
self._original_tracer = None
|
||||||
|
|
||||||
def __enter__(self):
|
def __enter__(self):
|
||||||
# test_pdb does not reset Breakpoint class attributes on exit :-(
|
# test_pdb does not reset Breakpoint class attributes on exit :-(
|
||||||
reset_Breakpoint()
|
reset_Breakpoint()
|
||||||
|
self._original_tracer = sys.gettrace()
|
||||||
return self.tracer
|
return self.tracer
|
||||||
|
|
||||||
def __exit__(self, type_=None, value=None, traceback=None):
|
def __exit__(self, type_=None, value=None, traceback=None):
|
||||||
reset_Breakpoint()
|
reset_Breakpoint()
|
||||||
sys.settrace(None)
|
sys.settrace(self._original_tracer)
|
||||||
|
|
||||||
not_empty = ''
|
not_empty = ''
|
||||||
if self.tracer.set_list:
|
if self.tracer.set_list:
|
||||||
|
|
|
@ -1516,7 +1516,7 @@ def test_resolve_common(self):
|
||||||
# resolves to 'dirB/..' first before resolving to parent of dirB.
|
# resolves to 'dirB/..' first before resolving to parent of dirB.
|
||||||
self._check_resolve_relative(p, P(BASE, 'foo', 'in', 'spam'), False)
|
self._check_resolve_relative(p, P(BASE, 'foo', 'in', 'spam'), False)
|
||||||
# Now create absolute symlinks
|
# Now create absolute symlinks
|
||||||
d = tempfile.mkdtemp(suffix='-dirD')
|
d = support._longpath(tempfile.mkdtemp(suffix='-dirD'))
|
||||||
self.addCleanup(support.rmtree, d)
|
self.addCleanup(support.rmtree, d)
|
||||||
os.symlink(os.path.join(d), join('dirA', 'linkX'))
|
os.symlink(os.path.join(d), join('dirA', 'linkX'))
|
||||||
os.symlink(join('dirB'), os.path.join(d, 'linkY'))
|
os.symlink(join('dirB'), os.path.join(d, 'linkY'))
|
||||||
|
|
|
@ -179,7 +179,8 @@ def _do_tls_handshake(self):
|
||||||
elif err.args[0] == ssl.SSL_ERROR_EOF:
|
elif err.args[0] == ssl.SSL_ERROR_EOF:
|
||||||
return self.handle_close()
|
return self.handle_close()
|
||||||
# TODO: SSLError does not expose alert information
|
# TODO: SSLError does not expose alert information
|
||||||
elif "SSLV3_ALERT_BAD_CERTIFICATE" in err.args[1]:
|
elif ("SSLV3_ALERT_BAD_CERTIFICATE" in err.args[1] or
|
||||||
|
"SSLV3_ALERT_CERTIFICATE_UNKNOWN" in err.args[1]):
|
||||||
return self.handle_close()
|
return self.handle_close()
|
||||||
raise
|
raise
|
||||||
except OSError as err:
|
except OSError as err:
|
||||||
|
@ -222,11 +223,12 @@ def start(self):
|
||||||
def run(self):
|
def run(self):
|
||||||
self.active = True
|
self.active = True
|
||||||
self.__flag.set()
|
self.__flag.set()
|
||||||
while self.active and asyncore.socket_map:
|
try:
|
||||||
self.active_lock.acquire()
|
while self.active and asyncore.socket_map:
|
||||||
asyncore.loop(timeout=0.1, count=1)
|
with self.active_lock:
|
||||||
self.active_lock.release()
|
asyncore.loop(timeout=0.1, count=1)
|
||||||
asyncore.close_all(ignore_all=True)
|
finally:
|
||||||
|
asyncore.close_all(ignore_all=True)
|
||||||
|
|
||||||
def stop(self):
|
def stop(self):
|
||||||
assert self.active
|
assert self.active
|
||||||
|
|
|
@ -481,7 +481,14 @@ def test_above_fd_setsize(self):
|
||||||
self.skipTest("FD limit reached")
|
self.skipTest("FD limit reached")
|
||||||
raise
|
raise
|
||||||
|
|
||||||
self.assertEqual(NUM_FDS // 2, len(s.select()))
|
try:
|
||||||
|
fds = s.select()
|
||||||
|
except OSError as e:
|
||||||
|
if e.errno == errno.EINVAL and sys.platform == 'darwin':
|
||||||
|
# unexplainable errors on macOS don't need to fail the test
|
||||||
|
self.skipTest("Invalid argument error calling poll()")
|
||||||
|
raise
|
||||||
|
self.assertEqual(NUM_FDS // 2, len(fds))
|
||||||
|
|
||||||
|
|
||||||
class DefaultSelectorTestCase(BaseSelectorTestCase):
|
class DefaultSelectorTestCase(BaseSelectorTestCase):
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
Enable CI builds on Visual Studio Team Services at
|
||||||
|
https://python.visualstudio.com/cpython
|
|
@ -0,0 +1 @@
|
||||||
|
tempfile._candidate_tempdir_list should consider common TEMP locations
|
|
@ -7,7 +7,7 @@ rem -q "quick" -- normally the tests are run twice, the first time
|
||||||
rem after deleting all the .pyc files reachable from Lib/.
|
rem after deleting all the .pyc files reachable from Lib/.
|
||||||
rem -q runs the tests just once, and without deleting .pyc files.
|
rem -q runs the tests just once, and without deleting .pyc files.
|
||||||
rem -x64 Run the 64-bit build of python (or python_d if -d was specified)
|
rem -x64 Run the 64-bit build of python (or python_d if -d was specified)
|
||||||
rem from the 'amd64' dir instead of the 32-bit build in this dir.
|
rem When omitted, uses %PREFIX% if set or the 32-bit build
|
||||||
rem All leading instances of these switches are shifted off, and
|
rem All leading instances of these switches are shifted off, and
|
||||||
rem whatever remains (up to 9 arguments) is passed to regrtest.py.
|
rem whatever remains (up to 9 arguments) is passed to regrtest.py.
|
||||||
rem For example,
|
rem For example,
|
||||||
|
@ -28,20 +28,21 @@ rem rt -u "network,largefile"
|
||||||
setlocal
|
setlocal
|
||||||
|
|
||||||
set pcbuild=%~dp0
|
set pcbuild=%~dp0
|
||||||
set prefix=%pcbuild%win32\
|
|
||||||
set suffix=
|
set suffix=
|
||||||
set qmode=
|
set qmode=
|
||||||
set dashO=
|
set dashO=
|
||||||
set regrtestargs=
|
set regrtestargs=
|
||||||
|
set exe=
|
||||||
|
|
||||||
:CheckOpts
|
:CheckOpts
|
||||||
if "%1"=="-O" (set dashO=-O) & shift & goto CheckOpts
|
if "%1"=="-O" (set dashO=-O) & shift & goto CheckOpts
|
||||||
if "%1"=="-q" (set qmode=yes) & shift & goto CheckOpts
|
if "%1"=="-q" (set qmode=yes) & shift & goto CheckOpts
|
||||||
if "%1"=="-d" (set suffix=_d) & shift & goto CheckOpts
|
if "%1"=="-d" (set suffix=_d) & shift & goto CheckOpts
|
||||||
if "%1"=="-x64" (set prefix=%pcbuild%amd64\) & shift & goto CheckOpts
|
if "%1"=="-x64" (set prefix=%pcbuild%amd64) & shift & goto CheckOpts
|
||||||
if NOT "%1"=="" (set regrtestargs=%regrtestargs% %1) & shift & goto CheckOpts
|
if NOT "%1"=="" (set regrtestargs=%regrtestargs% %1) & shift & goto CheckOpts
|
||||||
|
|
||||||
set exe=%prefix%python%suffix%.exe
|
if not defined prefix set prefix=%pcbuild%win32
|
||||||
|
set exe=%prefix%\python%suffix%.exe
|
||||||
set cmd="%exe%" %dashO% -u -Wd -E -bb -m test %regrtestargs%
|
set cmd="%exe%" %dashO% -u -Wd -E -bb -m test %regrtestargs%
|
||||||
if defined qmode goto Qmode
|
if defined qmode goto Qmode
|
||||||
|
|
||||||
|
@ -49,7 +50,7 @@ echo Deleting .pyc files ...
|
||||||
"%exe%" "%pcbuild%rmpyc.py"
|
"%exe%" "%pcbuild%rmpyc.py"
|
||||||
|
|
||||||
echo Cleaning _pth files ...
|
echo Cleaning _pth files ...
|
||||||
if exist %prefix%*._pth del %prefix%*._pth
|
if exist %prefix%\*._pth del %prefix%\*._pth
|
||||||
|
|
||||||
echo on
|
echo on
|
||||||
%cmd%
|
%cmd%
|
||||||
|
|
|
@ -125,6 +125,11 @@
|
||||||
"all and runs the test suite."
|
"all and runs the test suite."
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
'--system',
|
||||||
|
default='',
|
||||||
|
help="Override the automatic system type detection."
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class AbstractBuilder(object):
|
class AbstractBuilder(object):
|
||||||
|
@ -152,6 +157,7 @@ def __init__(self, version, args):
|
||||||
# build directory (removed after install)
|
# build directory (removed after install)
|
||||||
self.build_dir = os.path.join(
|
self.build_dir = os.path.join(
|
||||||
self.src_dir, self.build_template.format(version))
|
self.src_dir, self.build_template.format(version))
|
||||||
|
self.system = args.system
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return "<{0.__class__.__name__} for {0.version}>".format(self)
|
return "<{0.__class__.__name__} for {0.version}>".format(self)
|
||||||
|
@ -255,9 +261,13 @@ def _build_src(self):
|
||||||
log.info("Running build in {}".format(self.build_dir))
|
log.info("Running build in {}".format(self.build_dir))
|
||||||
cwd = self.build_dir
|
cwd = self.build_dir
|
||||||
cmd = ["./config", "shared", "--prefix={}".format(self.install_dir)]
|
cmd = ["./config", "shared", "--prefix={}".format(self.install_dir)]
|
||||||
self._subprocess_call(cmd, cwd=cwd)
|
env = None
|
||||||
|
if self.system:
|
||||||
|
env = os.environ.copy()
|
||||||
|
env['SYSTEM'] = self.system
|
||||||
|
self._subprocess_call(cmd, cwd=cwd, env=env)
|
||||||
# Old OpenSSL versions do not support parallel builds.
|
# Old OpenSSL versions do not support parallel builds.
|
||||||
self._subprocess_call(["make", "-j1"], cwd=cwd)
|
self._subprocess_call(["make", "-j1"], cwd=cwd, env=env)
|
||||||
|
|
||||||
def _make_install(self, remove=True):
|
def _make_install(self, remove=True):
|
||||||
self._subprocess_call(
|
self._subprocess_call(
|
||||||
|
|
Loading…
Reference in a new issue