github.com/okex/exchain@v1.8.0/libs/tendermint/scripts/release_management/github-publish.py (about) 1 #!/usr/bin/env python 2 3 # Publish an existing GitHub draft release. --id required. 4 # Optimized for CircleCI 5 6 import json 7 import os 8 import argparse 9 import httplib 10 from base64 import b64encode 11 12 13 def request(org, repo, id, data): 14 user_and_pass = b64encode(b"{0}:{1}".format(os.environ['GITHUB_USERNAME'], os.environ['GITHUB_TOKEN'])).decode("ascii") 15 headers = { 16 'User-Agent': 'tenderbot', 17 'Accept': 'application/vnd.github.v3+json', 18 'Authorization': 'Basic %s' % user_and_pass 19 } 20 21 conn = httplib.HTTPSConnection('api.github.com', timeout=5) 22 conn.request('POST', '/repos/{0}/{1}/releases/{2}'.format(org,repo,id), data, headers) 23 response = conn.getresponse() 24 if response.status < 200 or response.status > 299: 25 print(response) 26 conn.close() 27 raise IOError(response.reason) 28 responsedata = response.read() 29 conn.close() 30 return json.loads(responsedata) 31 32 33 if __name__ == "__main__": 34 parser = argparse.ArgumentParser() 35 parser.add_argument("--org", default="tendermint", help="GitHub organization") 36 parser.add_argument("--repo", default="tendermint", help="GitHub repository") 37 parser.add_argument("--id", help="GitHub release ID", required=True, type=int) 38 parser.add_argument("--version", default=os.environ.get('CIRCLE_TAG'), help="Version number for the release, e.g.: v1.0.0") 39 args = parser.parse_args() 40 41 if not os.environ.has_key('GITHUB_USERNAME'): 42 raise parser.error('GITHUB_USERNAME not set.') 43 44 if not os.environ.has_key('GITHUB_TOKEN'): 45 raise parser.error('GITHUB_TOKEN not set.') 46 47 try: 48 result = request(args.org, args.repo, args.id, data=json.dumps({'draft':False,'tag_name':"{0}".format(args.version)})) 49 except IOError as e: 50 print(e) 51 result = request(args.org, args.repo, args.id, data=json.dumps({'draft':False,'tag_name':"{0}-autorelease".format(args.version)})) 52 53 print(result['name'])