-
Notifications
You must be signed in to change notification settings - Fork 75
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add binary wheel building on Windows for all Python versions and PyPi upload on tags.
- Loading branch information
Showing
12 changed files
with
308 additions
and
88 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,46 +1,120 @@ | ||
environment: | ||
global: | ||
# SDK v7.0 MSVC Express 2008's SetEnv.cmd script will fail if the | ||
# /E:ON and /V:ON options are not enabled in the batch script intepreter | ||
# See: http://stackoverflow.com/a/13751649/163740 | ||
CMD_IN_ENV: "cmd /E:ON /V:ON /C %APPVEYOR_BUILD_FOLDER%\\ci\\appveyor\\run_with_env.cmd" | ||
PYTHONUNBUFFERED: 1 | ||
EMBEDDED_LIB: 1 | ||
PYPI_USER: | ||
secure: 2m0jy6JD/R9RExIosOT6YA== | ||
PYPI_PASS: | ||
secure: x+dF0A8BZUf2IrPNRN1O0w== | ||
matrix: | ||
- TARGET_ARCH: "x64" | ||
CONDA_PY: "27" | ||
PY_CONDITION: "python >=2.7,<3" | ||
CONDA_INSTALL_LOCN: "C:\\Miniconda-x64" | ||
- TARGET_ARCH: "x64" | ||
CONDA_PY: "35" | ||
PY_CONDITION: "python >=3.5,<3.6" | ||
CONDA_INSTALL_LOCN: "C:\\Miniconda35-x64" | ||
- TARGET_ARCH: "x64" | ||
CONDA_PY: "36" | ||
PY_CONDITION: "python >=3.6" | ||
CONDA_INSTALL_LOCN: "C:\\Miniconda36-x64" | ||
|
||
matrix: | ||
fast_finish: true | ||
|
||
cache: | ||
- "%TMP%\\py\\" | ||
|
||
build: false | ||
- PYTHON: "C:\\Python27" | ||
PYTHON_VERSION: "2.7" | ||
PYTHON_ARCH: "32" | ||
MSVC: "Visual Studio 9" | ||
|
||
- PYTHON: "C:\\Python27-x64" | ||
PYTHON_VERSION: "2.7" | ||
PYTHON_ARCH: "64" | ||
MSVC: "Visual Studio 9" | ||
|
||
- PYTHON: "C:\\Python34" | ||
PYTHON_VERSION: "3.4" | ||
PYTHON_ARCH: "32" | ||
MSVC: "Visual Studio 10" | ||
|
||
- PYTHON: "C:\\Python34-x64" | ||
PYTHON_VERSION: "3.4" | ||
PYTHON_ARCH: "64" | ||
MSVC: "Visual Studio 10 Win64" | ||
|
||
- PYTHON: "C:\\Python35" | ||
PYTHON_VERSION: "3.5" | ||
PYTHON_ARCH: "32" | ||
MSVC: "Visual Studio 14" | ||
|
||
- PYTHON: "C:\\Python35-x64" | ||
PYTHON_VERSION: "3.5" | ||
PYTHON_ARCH: "64" | ||
MSVC: "Visual Studio 14 Win64" | ||
|
||
- PYTHON: "C:\\Python36" | ||
PYTHON_VERSION: "3.6" | ||
PYTHON_ARCH: "32" | ||
MSVC: "Visual Studio 14" | ||
|
||
- PYTHON: "C:\\Python36-x64" | ||
PYTHON_VERSION: "3.6" | ||
PYTHON_ARCH: "64" | ||
MSVC: "Visual Studio 14 Win64" | ||
|
||
install: | ||
- set CONDA_NPY=19 | ||
# Remove cygwin (and therefore the git that comes with it). | ||
- rmdir C:\cygwin /s /q | ||
# Use the pre-installed Miniconda for the desired arch | ||
- set PATH=%CONDA_INSTALL_LOCN%/Library/bin;%CONDA_INSTALL_LOCN%/Scripts;%PATH% | ||
- conda update --yes --quiet conda | ||
- call %CONDA_INSTALL_LOCN%\Scripts\activate.bat | ||
- conda config --add channels conda-forge | ||
- conda config --set show_channel_urls true | ||
- conda install --yes --quiet conda-build-all | ||
- conda update --yes conda-build | ||
- conda install --yes --quiet conda-forge-build-setup | ||
- run_conda_forge_build_setup | ||
- conda build conda-recipe | ||
# If there is a newer build queued for the same PR, cancel this one. | ||
# The AppVeyor 'rollout builds' option is supposed to serve the same | ||
# purpose but it is problematic because it tends to cancel builds pushed | ||
# directly to master instead of just PR builds (or the converse). | ||
# credits: JuliaLang developers. | ||
- ps: if ($env:APPVEYOR_PULL_REQUEST_NUMBER -and $env:APPVEYOR_BUILD_NUMBER -ne ((Invoke-RestMethod ` | ||
https://ci.appveyor.com/api/projects/$env:APPVEYOR_ACCOUNT_NAME/$env:APPVEYOR_PROJECT_SLUG/history?recordsNumber=50).builds | ` | ||
Where-Object pullRequestId -eq $env:APPVEYOR_PULL_REQUEST_NUMBER)[0].buildNumber) { ` | ||
throw "There are newer queued builds for this pull request, failing early." } | ||
- ECHO "Installed SDKs:" | ||
- ps: "ls \"C:/Program Files/Microsoft SDKs/Windows\"" | ||
|
||
# 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)\"" | ||
|
||
# Upgrade to the latest version of pip to avoid it displaying warnings | ||
# about it being out of date. | ||
- "pip install --disable-pip-version-check --user --upgrade pip" | ||
|
||
# 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 | ||
- "%CMD_IN_ENV% pip install -r requirements_dev.txt" | ||
- "%CMD_IN_ENV% pip install -U wheel setuptools twine" | ||
- git submodule update --init --recursive | ||
|
||
# .c files need to be generated on Windows to handle platform | ||
# specific code. | ||
# Fix version used by versioneer to current git tag so the generated .c files | ||
# do not cause a version change. | ||
- python ci/appveyor/fix_version.py . | ||
- mv -f .git .git.bak | ||
|
||
build_script: | ||
# Build the compiled extension | ||
- "%CMD_IN_ENV% ci\\appveyor\\build_ssh2.bat" | ||
- rm -f ssh2/*.c | ||
- "%CMD_IN_ENV% python setup.py build" | ||
- "%CMD_IN_ENV% python setup.py build_ext -i" | ||
|
||
test_script: | ||
- python ci\move-conda-package.py | ||
- python -c "from ssh2.session import Session; Session()" | ||
|
||
platform: | ||
- x64 | ||
after_test: | ||
# If tests are successful, create binary packages for the project. | ||
- "%CMD_IN_ENV% python setup.py bdist_wheel" | ||
- "%CMD_IN_ENV% python setup.py bdist_wininst" | ||
- mv dist/* . | ||
# Create 'none' ABI dist packages for use by older pip/wheel versions | ||
- python ci/copy_abi_dist.py *.whl | ||
|
||
artifacts: | ||
- path: '*.tar.bz2' | ||
# Archive the generated packages in the ci.appveyor.com build report. | ||
- path: "*.whl" | ||
- path: "*.exe" | ||
|
||
deploy_script: | ||
- python ci/appveyor/pypi_upload.py *.whl | ||
- python ci/appveyor/pypi_upload.py *.exe |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
[submodule "libssh2"] | ||
path = libssh2 | ||
url = https://github.com/libssh2/libssh2.git |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
import sys | ||
import os | ||
from glob import glob | ||
import subprocess | ||
import traceback | ||
|
||
|
||
cmd = ['anaconda', '-t', os.environ['ANACONDA_TOKEN'], 'upload'] | ||
cmd.extend(glob('*.tar.bz2')) | ||
try: | ||
subprocess.check_call(cmd) | ||
except subprocess.CalledProcessError: | ||
sys.exit(1) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
mkdir src && cd src | ||
|
||
IF "%MSVC%" == "Visual Studio 9" ( | ||
ECHO "Building without platform set" | ||
cmake ..\libssh2 -G "NMake Makefiles" ^ | ||
-DCMAKE_BUILD_TYPE=Release ^ | ||
-DCRYPTO_BACKEND=WinCNG ^ | ||
-DBUILD_SHARED_LIBS=OFF | ||
) ELSE ( | ||
ECHO "Building with platform %MSVC%" | ||
cmake ..\libssh2 -G "NMake Makefiles" ^ | ||
-DCMAKE_BUILD_TYPE=Release ^ | ||
-DCRYPTO_BACKEND=WinCNG ^ | ||
-G"%MSVC%" ^ | ||
-DBUILD_SHARED_LIBS=OFF | ||
) | ||
|
||
cmake --build . --config Release | ||
cd .. | ||
ls src/src | ||
cp src/src/libssh2.lib %PYTHON%/libs/ || cp src/src/Release/libssh2.lib %PYTHON%/libs/ | ||
ls %PYTHON%/libs/ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,39 @@ | ||
import os | ||
from datetime import datetime | ||
import subprocess | ||
import json | ||
import sys | ||
|
||
def get_describe_tag(): | ||
return subprocess.check_output(['git', 'describe', '--tags']).strip().decode('utf-8') | ||
|
||
def make_version_file(basedir): | ||
# import ipdb; ipdb.set_trace() | ||
rev = os.environ['APPVEYOR_REPO_COMMIT'] | ||
basedir = os.path.abspath(basedir) | ||
git_desc = get_describe_tag() | ||
version_json = {'date': datetime.now().isoformat(), | ||
'dirty': False, | ||
'error': None, | ||
'full-revisionid': rev, | ||
'version': git_desc} | ||
data = """ | ||
import json | ||
version_json = ''' | ||
%s''' # END VERSION_JSON | ||
def get_versions(): | ||
return json.loads(version_json) | ||
""" % (json.dumps(version_json)) | ||
with open(os.path.join(basedir, 'ssh2', '_version.py'), 'w') as fh: | ||
fh.write(data) | ||
|
||
|
||
if __name__ == "__main__": | ||
if not len(sys.argv) > 1: | ||
sys.stderr.write("Need basedir of repo" + os.linesep) | ||
sys.exit(1) | ||
make_version_file(sys.argv[1]) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
from __future__ import print_function | ||
|
||
import sys | ||
import subprocess | ||
import os | ||
|
||
|
||
def upload_pypi(files): | ||
_user, _pass = os.environ['PYPI_USER'], os.environ['PYPI_PASS'] | ||
try: | ||
subprocess.check_call(['twine', 'upload', '-u', _user, | ||
'-p', _pass, files]) | ||
except Exception: | ||
sys.stderr.write("Error uploading to PyPi" + os.linesep) | ||
|
||
|
||
if __name__ == "__main__": | ||
if not len(sys.argv) > 1: | ||
sys.stderr.write("Need files to upload argument" + os.linesep) | ||
sys.exit(1) | ||
upload_pypi(os.path.abspath(sys.argv[1])) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
from __future__ import print_function | ||
|
||
import os | ||
from glob import glob | ||
import re | ||
import sys | ||
import shutil | ||
|
||
|
||
re_c = re.compile(r'.+-.+-.+-(.+)-.+\.') | ||
|
||
|
||
def rename_dist_files(files): | ||
for _file in glob(files): | ||
match = re_c.match(_file) | ||
abi = match.group(1) | ||
new_file = _file.replace(abi, 'none') | ||
print("Copying %s to new file %s" % (_file, new_file)) | ||
shutil.copy2(_file, new_file) | ||
|
||
if __name__ == "__main__": | ||
if len(sys.argv) < 2: | ||
sys.stderr.write("Need files argument" + os.linesep) | ||
sys.exit(1) | ||
rename_dist_files(os.path.abspath(sys.argv[1])) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.