summaryrefslogtreecommitdiff
path: root/appveyor/getwheels.py
diff options
context:
space:
mode:
authorFrazer McLean <frazer@frazermclean.co.uk>2016-07-16 23:11:19 +0200
committerFrazer McLean <frazer@frazermclean.co.uk>2016-07-20 00:11:20 +0200
commit0d1fb10033e197d75485dd4ea700da6bcd14ee0f (patch)
tree5203f7543903d948b0bf6ae027a1e75f13ea65a9 /appveyor/getwheels.py
parent8952a30f0a27d6b57e7b054b8b464382b67e3828 (diff)
downloadsqlalchemy-pr/291.tar.gz
Add AppVeyor build with autoupload when commit is tagged with 'rel_*'pr/291
Diffstat (limited to 'appveyor/getwheels.py')
-rw-r--r--appveyor/getwheels.py78
1 files changed, 78 insertions, 0 deletions
diff --git a/appveyor/getwheels.py b/appveyor/getwheels.py
new file mode 100644
index 000000000..84ac03045
--- /dev/null
+++ b/appveyor/getwheels.py
@@ -0,0 +1,78 @@
+# coding: utf-8
+from __future__ import absolute_import, division, print_function
+
+import os
+import sys
+from textwrap import dedent
+
+import requests
+
+URL = 'https://ci.appveyor.com/api'
+TOKEN = os.getenv('APPVEYOR_TOKEN')
+ACCOUNT = 'zzzeek' # AppVeyor username, assuming zzzeek
+PROJECT = 'sqlalchemy'
+
+if len(sys.argv) != 2:
+ sys.exit('getwheels.py <branch>')
+
+if TOKEN is None:
+ sys.exit('APPVEYOR_TOKEN env var not set.')
+
+branch = sys.argv[1]
+
+session = requests.Session()
+session.headers.update({'Authorization': 'Bearer ' + TOKEN})
+
+BRANCH_BUILD_URL = '{}/projects/{}/{}/branch/{}'.format(
+ URL, ACCOUNT, PROJECT, branch)
+
+response = session.get(BRANCH_BUILD_URL)
+response.raise_for_status()
+
+build_data = response.json()['build']
+
+message = dedent('''
+ Downloading wheels for latest build on branch {bd[branch]!r}.
+
+ Branch: {bd[branch]}
+ AppVeyor build: {bd[buildNumber]}
+ Commit ID: {bd[commitId]}
+ Commit message: {bd[message]}
+
+ Build status: {bd[status]}
+'''.format(bd=build_data))
+
+print(message)
+
+if build_data['status'] == 'failed':
+ sys.exit('Build failed, aborting download.')
+elif build_data['status'] == 'running':
+ sys.exit('Build still running, aborting download.')
+
+job_ids = [job['jobId'] for job in build_data['jobs']]
+
+
+def download_artifact(artifact):
+ FILE_URL = '{}/buildjobs/{}/artifacts'.format(
+ URL, job_id, artifact['fileName'])
+
+ print('Downloading', artifact['fileName'])
+
+ response = session.get(FILE_URL, stream=True)
+ response.raise_for_status()
+
+ with open(artifact['fileName'], 'wb') as fp:
+ for chunk in response.iter_content(chunk_size=100 * 1024):
+ fp.write(chunk)
+
+try:
+ os.mkdir('dist')
+except OSError:
+ pass
+
+for job_id in job_ids:
+ ARTIFACTS_URL = '{}/buildjobs/{}/artifacts'.format(URL, job_id)
+ response = session.get(ARTIFACTS_URL)
+ for artifact in response.json():
+ if artifact['fileName'].endswith('.whl'):
+ download_artifact(artifact)