|
|
- #!/usr/bin/env python
-
- # Upload a file to a GitHub draft release. --id and --file are required.
- # Optimized for CircleCI
-
- import json
- import os
- import re
- import argparse
- import mimetypes
- import httplib
- from base64 import b64encode
-
-
- def request(baseurl, path, mimetype, mimeencoding, data):
- user_and_pass = b64encode(b"{0}:{1}".format(os.environ['GITHUB_USERNAME'], os.environ['GITHUB_TOKEN'])).decode("ascii")
-
- headers = {
- 'User-Agent': 'tenderbot',
- 'Accept': 'application/vnd.github.v3.raw+json',
- 'Authorization': 'Basic %s' % user_and_pass,
- 'Content-Type': mimetype,
- 'Content-Encoding': mimeencoding
- }
-
- conn = httplib.HTTPSConnection(baseurl, timeout=5)
- conn.request('POST', path, data, headers)
- response = conn.getresponse()
- if response.status < 200 or response.status > 299:
- print(response)
- conn.close()
- raise IOError(response.reason)
- responsedata = response.read()
- conn.close()
- return json.loads(responsedata)
-
-
- if __name__ == "__main__":
- parser = argparse.ArgumentParser()
- parser.add_argument("--id", help="GitHub release ID", required=True, type=int)
- parser.add_argument("--file", default="/tmp/workspace/tendermint_{0}_{1}_{2}.zip".format(os.environ.get('CIRCLE_TAG'),os.environ.get('GOOS'),os.environ.get('GOARCH')), help="File to upload")
- parser.add_argument("--return-id-only", help="Return only the release ID after upload to GitHub.", action='store_true')
- args = parser.parse_args()
-
- if not os.environ.has_key('GITHUB_USERNAME'):
- raise parser.error('GITHUB_USERNAME not set.')
-
- if not os.environ.has_key('GITHUB_TOKEN'):
- raise parser.error('GITHUB_TOKEN not set.')
-
- mimetypes.init()
- filename = os.path.basename(args.file)
- mimetype,mimeencoding = mimetypes.guess_type(filename, strict=False)
- if mimetype is None:
- mimetype = 'application/zip'
- if mimeencoding is None:
- mimeencoding = 'utf8'
-
- with open(args.file,'rb') as f:
- asset = f.read()
-
- result = request('uploads.github.com', '/repos/tendermint/tendermint/releases/{0}/assets?name={1}'.format(args.id, filename), mimetype, mimeencoding, asset)
-
- if args.return_id_only:
- print(result['id'])
- else:
- print(result['browser_download_url'])
-
|