summaryrefslogtreecommitdiff
path: root/scripts/release.py
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/release.py')
-rw-r--r--scripts/release.py82
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()