github.com/vipernet-xyz/tendermint-core@v0.32.0/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'])