From 74ab399ed012687dd1f86d17f40a1a369e396e02 Mon Sep 17 00:00:00 2001 From: Ben Kurtovic Date: Mon, 8 Jun 2015 18:29:22 -0400 Subject: [PATCH] Try out appveyor config (#95) --- appveyor.yml | 56 ++++++++++++++++++++++++++++++++ scripts/README | 3 ++ scripts/release.sh | 7 ++-- scripts/win_build.py | 58 --------------------------------- scripts/win_install.ps1 | 85 +++++++++++++++++++++++++++++++++++++++++++++++++ scripts/win_wrapper.cmd | 47 +++++++++++++++++++++++++++ 6 files changed, 195 insertions(+), 61 deletions(-) create mode 100644 appveyor.yml create mode 100644 scripts/README delete mode 100644 scripts/win_build.py create mode 100644 scripts/win_install.ps1 create mode 100644 scripts/win_wrapper.cmd diff --git a/appveyor.yml b/appveyor.yml new file mode 100644 index 0000000..c312c89 --- /dev/null +++ b/appveyor.yml @@ -0,0 +1,56 @@ +# This config file is used by appveyor.com to build Windows release binaries + +version: 0.4.1.dev0-b{build} + +branches: + only: + - master + +skip_tags: true + +environment: + global: + # See: http://stackoverflow.com/a/13751649/163740 + WRAPPER: "cmd /E:ON /V:ON /C .\\scripts\\win_wrapper.cmd" + + matrix: + - PYTHON: "C:\\Python27" + PYTHON_VERSION: "2.7.10" + PYTHON_ARCH: "32" + + - PYTHON: "C:\\Python27-x64" + PYTHON_VERSION: "2.7.10" + PYTHON_ARCH: "64" + + - PYTHON: "C:\\Python33" + PYTHON_VERSION: "3.3.6" + PYTHON_ARCH: "32" + + - PYTHON: "C:\\Python33-x64" + PYTHON_VERSION: "3.3.6" + PYTHON_ARCH: "64" + + - PYTHON: "C:\\Python34" + PYTHON_VERSION: "3.4.3" + PYTHON_ARCH: "32" + + - PYTHON: "C:\\Python34-x64" + PYTHON_VERSION: "3.4.3" + PYTHON_ARCH: "64" + +install: + - "powershell scripts\\win_install.ps1" + +build_script: + - "%WRAPPER% %PYTHON%\\python setup.py build" + +test_script: + - "%WRAPPER% %PYTHON%\\python setup.py -q test" + +after_test: + - "%WRAPPER% %PYTHON%\\python setup.py bdist_wheel" + +artifacts: + - path: dist\* + +deploy: off diff --git a/scripts/README b/scripts/README new file mode 100644 index 0000000..eea9627 --- /dev/null +++ b/scripts/README @@ -0,0 +1,3 @@ +This directory contains support files used for *developing* mwparserfromhell, +not running it. If you are looking for code examples, read the documentation +or explore the source code. diff --git a/scripts/release.sh b/scripts/release.sh index dcd871c..7d79e8e 100755 --- a/scripts/release.sh +++ b/scripts/release.sh @@ -31,6 +31,8 @@ update_version() { echo " done." } +# TODO: update appveyor version! + update_changelog() { filename="CHANGELOG" echo -n "Updating $filename..." @@ -67,10 +69,9 @@ do_git_stuff() { } upload_to_pypi() { - # TODO: check whether these commands give output echo -n "PyPI: uploading source tarball and docs..." - python setup.py register sdist upload -s - python setup.py upload_docs + python setup.py -q register sdist upload -s + python setup.py -q upload_docs echo " done." } diff --git a/scripts/win_build.py b/scripts/win_build.py deleted file mode 100644 index 2d51909..0000000 --- a/scripts/win_build.py +++ /dev/null @@ -1,58 +0,0 @@ -# Build requirements: -# -# Python 2.6-3.2: Visual C++ Express Edition 2008: -# http://go.microsoft.com/?linkid=7729279 -# -# Python 3.3+: Visual C++ Express Edition 2010: -# http://go.microsoft.com/?linkid=9709949 -# -# x64 builds: Microsoft Windows SDK for Windows 7 and .NET Framework 3.5 SP1: -# http://www.microsoft.com/en-us/download/details.aspx?id=3138 -# -# Python interpreter, 2.6, 2.7, 3.2-3.4: -# https://www.python.org/downloads/ -# -# Pip, setuptools, wheel: -# https://bootstrap.pypa.io/get-pip.py -# and run *for each* Python version: -# c:\pythonXX\python get-pip.py -# c:\pythonXX\scripts\pip install wheel -# -# Afterwards, run this script with any of the python interpreters (2.7 suggested) - -from __future__ import print_function -import os -from subprocess import call, STDOUT - -ENVIRONMENTS = ["26", "27", "32", "33", "34"] - -def run(pyver, cmds): - cmd = [r"C:\Python%s\Python.exe" % pyver, "setup.py"] + cmds - print(" ".join(cmd), end=" ") - - with open("%s%s.log" % (cmds[0], pyver), "w") as logfile: - retval = call(cmd, stdout=logfile, stderr=STDOUT, cwd="..") - if not retval: - print("[OK]") - else: - print("[FAILED (%i)]" % retval) - return retval - -def main(): - path = os.path.split(__file__)[0] - if path: - os.chdir(path) - - print("Building Windows wheels for Python %s:" % ", ".join(ENVIRONMENTS)) - for pyver in ENVIRONMENTS: - print() - try: - os.unlink("mwparserfromhell/parser/_tokenizer.pyd") - except OSError: - pass - - if run(pyver, ["test"]) == 0: - run(pyver, ["bdist_wheel", "upload"]) # TODO: add "-s" to GPG sign - -if __name__ == "__main__": - main() diff --git a/scripts/win_install.ps1 b/scripts/win_install.ps1 new file mode 100644 index 0000000..bd76d11 --- /dev/null +++ b/scripts/win_install.ps1 @@ -0,0 +1,85 @@ +# Sample script to install Python and pip under Windows +# Authors: Olivier Grisel and Kyle Kastner +# License: CC0 1.0 Universal: http://creativecommons.org/publicdomain/zero/1.0/ + +$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 = 3 + for($i=0; $i -lt $retry_attempts; $i++){ + try { + $webclient.DownloadFile($url, $filepath) + break + } + Catch [Exception]{ + Start-Sleep 1 + } + } + Write-Host "File saved at" $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" + } + $filepath = DownloadPython $python_version $platform_suffix + Write-Host "Installing" $filepath "to" $python_home + $args = "/qn /i $filepath TARGETDIR=$python_home" + Write-Host "msiexec.exe" $args + Start-Process -FilePath "msiexec.exe" -ArgumentList $args -Wait -Passthru + Write-Host "Python $python_version ($architecture) installation complete" + return $true +} + + +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 InstallPackage ($python_home, $pkg) { + $pip_path = $python_home + "/Scripts/pip.exe" + & $pip_path install $pkg +} + +function main () { + InstallPython $env:PYTHON_VERSION $env:PYTHON_ARCH $env:PYTHON + InstallPip $env:PYTHON + InstallPackage $env:PYTHON wheel +} + +main diff --git a/scripts/win_wrapper.cmd b/scripts/win_wrapper.cmd new file mode 100644 index 0000000..3a472bc --- /dev/null +++ b/scripts/win_wrapper.cmd @@ -0,0 +1,47 @@ +:: To build extensions for 64 bit Python 3, we need to configure environment +:: variables to use the MSVC 2010 C++ compilers from GRMSDKX_EN_DVD.iso of: +:: MS Windows SDK for Windows 7 and .NET Framework 4 (SDK v7.1) +:: +:: To build extensions for 64 bit Python 2, we need to configure environment +:: variables to use the MSVC 2008 C++ compilers from GRMSDKX_EN_DVD.iso of: +:: MS Windows SDK for Windows 7 and .NET Framework 3.5 (SDK v7.0) +:: +:: 32 bit builds do not require specific environment configurations. +:: +:: Note: this script needs to be run with the /E:ON and /V:ON flags for the +:: cmd interpreter, at least for (SDK v7.0) +:: +:: More details at: +:: https://github.com/cython/cython/wiki/64BitCythonExtensionsOnWindows +:: http://stackoverflow.com/a/13751649/163740 +:: +:: Author: Olivier Grisel +:: License: CC0 1.0 Universal: http://creativecommons.org/publicdomain/zero/1.0/ +@ECHO OFF + +SET COMMAND_TO_RUN=%* +SET WIN_SDK_ROOT=C:\Program Files\Microsoft SDKs\Windows + +SET MAJOR_PYTHON_VERSION="%PYTHON_VERSION:~0,1%" +IF %MAJOR_PYTHON_VERSION% == "2" ( + SET WINDOWS_SDK_VERSION="v7.0" +) ELSE IF %MAJOR_PYTHON_VERSION% == "3" ( + SET WINDOWS_SDK_VERSION="v7.1" +) ELSE ( + ECHO Unsupported Python version: "%MAJOR_PYTHON_VERSION%" + EXIT 1 +) + +IF "%PYTHON_ARCH%"=="64" ( + ECHO Configuring Windows SDK %WINDOWS_SDK_VERSION% for Python %MAJOR_PYTHON_VERSION% on a 64 bit architecture + SET DISTUTILS_USE_SDK=1 + SET MSSdk=1 + "%WIN_SDK_ROOT%\%WINDOWS_SDK_VERSION%\Setup\WindowsSdkVer.exe" -q -version:%WINDOWS_SDK_VERSION% + "%WIN_SDK_ROOT%\%WINDOWS_SDK_VERSION%\Bin\SetEnv.cmd" /x64 /release + ECHO Executing: %COMMAND_TO_RUN% + call %COMMAND_TO_RUN% || EXIT 1 +) ELSE ( + ECHO Using default MSVC build environment for 32 bit architecture + ECHO Executing: %COMMAND_TO_RUN% + call %COMMAND_TO_RUN% || EXIT 1 +)