Optimize appveyor build
- AppVeyor does not run matrix builds in parallel, so creating a matrix with the intent to speed up the build will actually result in longer build times, as each matrix will execute in a brand new VM. - tox does not detect 64 bit installations in AppVeyor, it always installs interpreters from C:\PythonX.Y, so there's no point to have 64bit builds - No need for the auxiliary script "install.ps1" because all python versions we are interested in are already pre-installed in AppVeyor
This commit is contained in:
parent
46c85bc352
commit
1d60f61ba8
105
appveyor.yml
105
appveyor.yml
|
@ -1,98 +1,19 @@
|
||||||
environment:
|
|
||||||
matrix:
|
|
||||||
|
|
||||||
# Pre-installed Python versions, which Appveyor may upgrade to
|
|
||||||
# a later point release.
|
|
||||||
|
|
||||||
- PYTHON: "C:\\Python27"
|
|
||||||
PYTHON_VERSION: "2.7.x" # currently 2.7.9
|
|
||||||
PYTHON_ARCH: "32"
|
|
||||||
TESTENV: "py27"
|
|
||||||
|
|
||||||
- PYTHON: "C:\\Python27-x64"
|
|
||||||
PYTHON_VERSION: "2.7.x" # currently 2.7.9
|
|
||||||
PYTHON_ARCH: "64"
|
|
||||||
TESTENV: "py27"
|
|
||||||
|
|
||||||
- PYTHON: "C:\\Python33"
|
|
||||||
PYTHON_VERSION: "3.3.x" # currently 3.3.5
|
|
||||||
PYTHON_ARCH: "32"
|
|
||||||
TESTENV: "py33"
|
|
||||||
|
|
||||||
- PYTHON: "C:\\Python33-x64"
|
|
||||||
PYTHON_VERSION: "3.3.x" # currently 3.3.5
|
|
||||||
PYTHON_ARCH: "64"
|
|
||||||
TESTENV: "py33"
|
|
||||||
|
|
||||||
- PYTHON: "C:\\Python34"
|
|
||||||
PYTHON_VERSION: "3.4.x" # currently 3.4.3
|
|
||||||
PYTHON_ARCH: "32"
|
|
||||||
TESTENV: "py34"
|
|
||||||
|
|
||||||
- PYTHON: "C:\\Python34-x64"
|
|
||||||
PYTHON_VERSION: "3.4.x" # currently 3.4.3
|
|
||||||
PYTHON_ARCH: "64"
|
|
||||||
TESTENV: "py34"
|
|
||||||
|
|
||||||
- PYTHON: "C:\\Python35"
|
|
||||||
PYTHON_VERSION: "3.5.x" # currently 3.5.0
|
|
||||||
PYTHON_ARCH: "32"
|
|
||||||
TESTENV: "py35"
|
|
||||||
|
|
||||||
- PYTHON: "C:\\Python35-x64"
|
|
||||||
PYTHON_VERSION: "3.5.x" # currently 3.5.0
|
|
||||||
PYTHON_ARCH: "64"
|
|
||||||
TESTENV: "py35"
|
|
||||||
|
|
||||||
# Also test a Python version not pre-installed
|
|
||||||
# See: https://github.com/ogrisel/python-appveyor-demo/issues/10
|
|
||||||
|
|
||||||
- PYTHON: "C:\\Python266"
|
|
||||||
PYTHON_VERSION: "2.6.6"
|
|
||||||
PYTHON_ARCH: "32"
|
|
||||||
TESTENV: "py26"
|
|
||||||
|
|
||||||
# xdist testing
|
|
||||||
|
|
||||||
- PYTHON: "C:\\Python27"
|
|
||||||
PYTHON_VERSION: "2.7.x" # currently 2.7.9
|
|
||||||
PYTHON_ARCH: "32"
|
|
||||||
TESTENV: "py27-xdist"
|
|
||||||
|
|
||||||
- PYTHON: "C:\\Python35"
|
|
||||||
PYTHON_VERSION: "3.5.x" # currently 3.5.0
|
|
||||||
PYTHON_ARCH: "32"
|
|
||||||
TESTENV: "py35-xdist"
|
|
||||||
|
|
||||||
|
|
||||||
install:
|
install:
|
||||||
- ECHO "Filesystem root:"
|
- echo Installed Pythons
|
||||||
- ps: "ls \"C:/\""
|
- dir c:\Python*
|
||||||
|
|
||||||
- ECHO "Installed SDKs:"
|
- C:\Python35\python -m pip install tox
|
||||||
- ps: "ls \"C:/Program Files/Microsoft SDKs/Windows\""
|
|
||||||
|
|
||||||
# Install Python (from the official .msi of http://python.org) and pip when
|
|
||||||
# not already installed.
|
|
||||||
- ps: if (-not(Test-Path($env:PYTHON))) { & appveyor\install.ps1 }
|
|
||||||
|
|
||||||
# Prepend newly installed Python to the PATH of this build (this cannot be
|
|
||||||
# done from inside the powershell script as it would require to restart
|
|
||||||
# the parent CMD process).
|
|
||||||
- "SET PATH=%PYTHON%;%PYTHON%\\Scripts;%PATH%"
|
|
||||||
|
|
||||||
# Check that we have the expected version and architecture for Python
|
|
||||||
- "python --version"
|
|
||||||
- "python -c \"import struct; print(struct.calcsize('P') * 8)\""
|
|
||||||
|
|
||||||
# Install the build dependencies of the project. If some dependencies contain
|
|
||||||
# compiled extensions and are not provided as pre-built wheel packages,
|
|
||||||
# pip will build them from source using the MSVC compiler matching the
|
|
||||||
# target Python version and architecture
|
|
||||||
- C:\Python27\python -m pip install tox
|
|
||||||
|
|
||||||
build: false # Not a C# project, build stuff at the test step instead.
|
build: false # Not a C# project, build stuff at the test step instead.
|
||||||
|
|
||||||
test_script:
|
test_script:
|
||||||
# Build the compiled extension and run the project tests
|
- 'set TESTENVS=
|
||||||
- C:\Python27\python -m tox -e %TESTENV%
|
flakes,
|
||||||
|
py26,
|
||||||
|
py27,
|
||||||
|
py33,
|
||||||
|
py34,
|
||||||
|
py27-xdist,
|
||||||
|
py35-xdist
|
||||||
|
'
|
||||||
|
- C:\Python35\python -m tox -e "%TESTENVS%"
|
||||||
|
|
|
@ -1,180 +0,0 @@
|
||||||
# Sample script to install Python and pip under Windows
|
|
||||||
# Authors: Olivier Grisel, Jonathan Helmus and Kyle Kastner
|
|
||||||
# License: CC0 1.0 Universal: http://creativecommons.org/publicdomain/zero/1.0/
|
|
||||||
|
|
||||||
$MINICONDA_URL = "http://repo.continuum.io/miniconda/"
|
|
||||||
$BASE_URL = "https://www.python.org/ftp/python/"
|
|
||||||
$GET_PIP_URL = "https://bootstrap.pypa.io/get-pip.py"
|
|
||||||
$GET_PIP_PATH = "C:\get-pip.py"
|
|
||||||
|
|
||||||
|
|
||||||
function DownloadPython ($python_version, $platform_suffix) {
|
|
||||||
$webclient = New-Object System.Net.WebClient
|
|
||||||
$filename = "python-" + $python_version + $platform_suffix + ".msi"
|
|
||||||
$url = $BASE_URL + $python_version + "/" + $filename
|
|
||||||
|
|
||||||
$basedir = $pwd.Path + "\"
|
|
||||||
$filepath = $basedir + $filename
|
|
||||||
if (Test-Path $filename) {
|
|
||||||
Write-Host "Reusing" $filepath
|
|
||||||
return $filepath
|
|
||||||
}
|
|
||||||
|
|
||||||
# Download and retry up to 3 times in case of network transient errors.
|
|
||||||
Write-Host "Downloading" $filename "from" $url
|
|
||||||
$retry_attempts = 2
|
|
||||||
for($i=0; $i -lt $retry_attempts; $i++){
|
|
||||||
try {
|
|
||||||
$webclient.DownloadFile($url, $filepath)
|
|
||||||
break
|
|
||||||
}
|
|
||||||
Catch [Exception]{
|
|
||||||
Start-Sleep 1
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (Test-Path $filepath) {
|
|
||||||
Write-Host "File saved at" $filepath
|
|
||||||
} else {
|
|
||||||
# Retry once to get the error message if any at the last try
|
|
||||||
$webclient.DownloadFile($url, $filepath)
|
|
||||||
}
|
|
||||||
return $filepath
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
function InstallPython ($python_version, $architecture, $python_home) {
|
|
||||||
Write-Host "Installing Python" $python_version "for" $architecture "bit architecture to" $python_home
|
|
||||||
if (Test-Path $python_home) {
|
|
||||||
Write-Host $python_home "already exists, skipping."
|
|
||||||
return $false
|
|
||||||
}
|
|
||||||
if ($architecture -eq "32") {
|
|
||||||
$platform_suffix = ""
|
|
||||||
} else {
|
|
||||||
$platform_suffix = ".amd64"
|
|
||||||
}
|
|
||||||
$msipath = DownloadPython $python_version $platform_suffix
|
|
||||||
Write-Host "Installing" $msipath "to" $python_home
|
|
||||||
$install_log = $python_home + ".log"
|
|
||||||
$install_args = "/qn /log $install_log /i $msipath TARGETDIR=$python_home"
|
|
||||||
$uninstall_args = "/qn /x $msipath"
|
|
||||||
RunCommand "msiexec.exe" $install_args
|
|
||||||
if (-not(Test-Path $python_home)) {
|
|
||||||
Write-Host "Python seems to be installed else-where, reinstalling."
|
|
||||||
RunCommand "msiexec.exe" $uninstall_args
|
|
||||||
RunCommand "msiexec.exe" $install_args
|
|
||||||
}
|
|
||||||
if (Test-Path $python_home) {
|
|
||||||
Write-Host "Python $python_version ($architecture) installation complete"
|
|
||||||
} else {
|
|
||||||
Write-Host "Failed to install Python in $python_home"
|
|
||||||
Get-Content -Path $install_log
|
|
||||||
Exit 1
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function RunCommand ($command, $command_args) {
|
|
||||||
Write-Host $command $command_args
|
|
||||||
Start-Process -FilePath $command -ArgumentList $command_args -Wait -Passthru
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
function InstallPip ($python_home) {
|
|
||||||
$pip_path = $python_home + "\Scripts\pip.exe"
|
|
||||||
$python_path = $python_home + "\python.exe"
|
|
||||||
if (-not(Test-Path $pip_path)) {
|
|
||||||
Write-Host "Installing pip..."
|
|
||||||
$webclient = New-Object System.Net.WebClient
|
|
||||||
$webclient.DownloadFile($GET_PIP_URL, $GET_PIP_PATH)
|
|
||||||
Write-Host "Executing:" $python_path $GET_PIP_PATH
|
|
||||||
Start-Process -FilePath "$python_path" -ArgumentList "$GET_PIP_PATH" -Wait -Passthru
|
|
||||||
} else {
|
|
||||||
Write-Host "pip already installed."
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
function DownloadMiniconda ($python_version, $platform_suffix) {
|
|
||||||
$webclient = New-Object System.Net.WebClient
|
|
||||||
if ($python_version -eq "3.4") {
|
|
||||||
$filename = "Miniconda3-3.5.5-Windows-" + $platform_suffix + ".exe"
|
|
||||||
} else {
|
|
||||||
$filename = "Miniconda-3.5.5-Windows-" + $platform_suffix + ".exe"
|
|
||||||
}
|
|
||||||
$url = $MINICONDA_URL + $filename
|
|
||||||
|
|
||||||
$basedir = $pwd.Path + "\"
|
|
||||||
$filepath = $basedir + $filename
|
|
||||||
if (Test-Path $filename) {
|
|
||||||
Write-Host "Reusing" $filepath
|
|
||||||
return $filepath
|
|
||||||
}
|
|
||||||
|
|
||||||
# Download and retry up to 3 times in case of network transient errors.
|
|
||||||
Write-Host "Downloading" $filename "from" $url
|
|
||||||
$retry_attempts = 2
|
|
||||||
for($i=0; $i -lt $retry_attempts; $i++){
|
|
||||||
try {
|
|
||||||
$webclient.DownloadFile($url, $filepath)
|
|
||||||
break
|
|
||||||
}
|
|
||||||
Catch [Exception]{
|
|
||||||
Start-Sleep 1
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (Test-Path $filepath) {
|
|
||||||
Write-Host "File saved at" $filepath
|
|
||||||
} else {
|
|
||||||
# Retry once to get the error message if any at the last try
|
|
||||||
$webclient.DownloadFile($url, $filepath)
|
|
||||||
}
|
|
||||||
return $filepath
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
function InstallMiniconda ($python_version, $architecture, $python_home) {
|
|
||||||
Write-Host "Installing Python" $python_version "for" $architecture "bit architecture to" $python_home
|
|
||||||
if (Test-Path $python_home) {
|
|
||||||
Write-Host $python_home "already exists, skipping."
|
|
||||||
return $false
|
|
||||||
}
|
|
||||||
if ($architecture -eq "32") {
|
|
||||||
$platform_suffix = "x86"
|
|
||||||
} else {
|
|
||||||
$platform_suffix = "x86_64"
|
|
||||||
}
|
|
||||||
$filepath = DownloadMiniconda $python_version $platform_suffix
|
|
||||||
Write-Host "Installing" $filepath "to" $python_home
|
|
||||||
$install_log = $python_home + ".log"
|
|
||||||
$args = "/S /D=$python_home"
|
|
||||||
Write-Host $filepath $args
|
|
||||||
Start-Process -FilePath $filepath -ArgumentList $args -Wait -Passthru
|
|
||||||
if (Test-Path $python_home) {
|
|
||||||
Write-Host "Python $python_version ($architecture) installation complete"
|
|
||||||
} else {
|
|
||||||
Write-Host "Failed to install Python in $python_home"
|
|
||||||
Get-Content -Path $install_log
|
|
||||||
Exit 1
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
function InstallMinicondaPip ($python_home) {
|
|
||||||
$pip_path = $python_home + "\Scripts\pip.exe"
|
|
||||||
$conda_path = $python_home + "\Scripts\conda.exe"
|
|
||||||
if (-not(Test-Path $pip_path)) {
|
|
||||||
Write-Host "Installing pip..."
|
|
||||||
$args = "install --yes pip"
|
|
||||||
Write-Host $conda_path $args
|
|
||||||
Start-Process -FilePath "$conda_path" -ArgumentList $args -Wait -Passthru
|
|
||||||
} else {
|
|
||||||
Write-Host "pip already installed."
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function main () {
|
|
||||||
InstallPython $env:PYTHON_VERSION $env:PYTHON_ARCH $env:PYTHON
|
|
||||||
InstallPip $env:PYTHON
|
|
||||||
}
|
|
||||||
|
|
||||||
main
|
|
Loading…
Reference in New Issue