diff options
Diffstat (limited to 'scripts/release.py')
-rw-r--r-- | scripts/release.py | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/scripts/release.py b/scripts/release.py new file mode 100644 index 0000000..c540640 --- /dev/null +++ b/scripts/release.py @@ -0,0 +1,82 @@ +#!/usr/bin/env python3 +from urllib.request import urlopen + +import json +import os +import subprocess +import sys +import getpass + + +def get_json(url): + return json.loads(urlopen(url).read().decode('utf-8')) + + +def download_file(src_url, dest_path): + print(dest_path) + subprocess.call( + ['curl', '-L', '-#', '-o', dest_path, src_url]) + + +def download_appveyor_artifacts(): + api_url = 'https://ci.appveyor.com/api' + builds = get_json( + '{}/projects/etrepum/simplejson'.format(api_url)) + + for job in builds['build']['jobs']: + url = '{api_url}/buildjobs/{jobId}/artifacts'.format( + api_url=api_url, **job) + for artifact in get_json(url): + download_file( + '{url}/{fileName}'.format(url=url, **artifact), + artifact['fileName']) + + +def download_github_artifacts(): + release = get_json( + 'https://api.github.com/repos/simplejson/simplejson/releases/latest') + for asset in release['assets']: + download_file(asset['browser_download_url'], 'dist/{name}'.format(**asset)) + + +def get_version(): + return subprocess.check_output( + [sys.executable, 'setup.py', '--version'], + encoding='utf8' + ).strip() + + +def artifact_matcher(version): + prefix = 'simplejson-{}'.format(version) + def matches(fn): + return ( + fn.startswith(prefix) and + os.path.splitext(fn)[1] in ('.exe', '.whl') and + not fn.endswith('-none-any.whl') + ) or fn == '{}.tar.gz'.format(prefix) + return matches + + +def upload_artifacts(version): + artifacts = set(os.listdir('dist')) + matches = artifact_matcher(version) + args = ['twine', 'upload'] + for fn in artifacts: + if matches(fn): + filename = os.path.join('dist', fn) + args.extend([filename, filename + '.asc']) + subprocess.check_call(args) + + +def main(): + try: + os.makedirs('dist') + except OSError: + pass + download_appveyor_artifacts() + download_github_artifacts() + upload_artifacts(get_version()) + + +if __name__ == '__main__': + main() |