]> granicus.if.org Git - pdns/commitdiff
Merge pull request #7421 from aerique/feature/support-for-github-access-tokens
authoraerique <aerique@xs4all.nl>
Fri, 8 Feb 2019 14:29:40 +0000 (15:29 +0100)
committerGitHub <noreply@github.com>
Fri, 8 Feb 2019 14:29:40 +0000 (15:29 +0100)
Hack in support for GitHub access tokens.

build-scripts/changelog-from-pr.py

index 709f70f15c0a032e9ca4601583cce50372c51f09..eb6f045c24bbb9587ea0020f6c0b841e80736d86 100755 (executable)
@@ -10,7 +10,9 @@ argp = argparse.ArgumentParser()
 argp.add_argument('--oneline', action='store_true',
                   help='Make one-lined changelog entries (for 4.0 and older)')
 argp.add_argument('--username',
-                  help='Use the specified username for Basic Authentication to the GitHub API, allowing an higher rate limit')
+                  help='Use the specified username for Basic Authentication to the GitHub API, allowing a higher rate limit')
+argp.add_argument('--access_token',
+                  help='Use API access token instead of username & password combination')
 argp.add_argument('pullrequest', metavar='PULL_REQUEST', nargs='+',
                   help='Make changelogs for these Pull Request #\'s')
 arguments = argp.parse_args()
@@ -23,12 +25,20 @@ if arguments.username:
     password = getpass.getpass("GitHub password for '" + arguments.username + "': ")
     httpAuth = requests.auth.HTTPBasicAuth(arguments.username, password)
 
+# https://github.com/settings/tokens
+# A token with `repo` and `user` access will definitely work.
+access_token = arguments.access_token
+
 for pr in arguments.pullrequest:
     if pr[0] == '#':
         pr = pr[1:]
     try:
-        res = requests.get('https://api.github.com/repos/PowerDNS/pdns/pulls/'
-                           '{}'.format(pr), auth=httpAuth)
+        if access_token:
+            res = requests.get('https://api.github.com/repos/PowerDNS/pdns/pulls/'
+                               '{}?access_token={}'.format(pr, access_token))
+        else:
+            res = requests.get('https://api.github.com/repos/PowerDNS/pdns/pulls/'
+                               '{}'.format(pr), auth=httpAuth)
         pr_info = res.json()
     except (requests.exceptions.HTTPError, ValueError) as e:
         print(e)
@@ -42,16 +52,25 @@ for pr in arguments.pullrequest:
         out += '  .. change::\n' + \
                '    :tags: XXXXXX\n' + \
                '    :pullreq: {}\n'.format(pr)
-        tickets = re.findall(ticket_regex, pr_info['body'])
-        if len(tickets):
-            out += '    :tickets: {}\n'.format(', '.join(tickets))
+        body = pr_info.get('body', None)
+        if pr_info.get('message', None) and not body:
+            # A bit blunt but better than we had.
+            print('{}'.format(pr_info['message']))
+            sys.exit(1)
+        elif body:
+            tickets = re.findall(ticket_regex, body)
+            if len(tickets):
+                out += '    :tickets: {}\n'.format(', '.join(tickets))
         out += '\n    {}'.format(pr_info['title'].capitalize())
 
     if pr_info['user']['login'].lower() not in ['ahupowerdns', 'habbie',
                                                 'pieterlexis', 'rgacogne',
                                                 'aerique', 'chbruyand']:
         try:
-            user_info = requests.get(pr_info['user']['url'], auth=httpAuth).json()
+            if access_token:
+                user_info = requests.get(pr_info['user']['url'] + '?access_token=' + access_token, auth=httpAuth).json()
+            else:
+                user_info = requests.get(pr_info['user']['url'], auth=httpAuth).json()
         except (requests.exceptions.HTTPError, ValueError) as e:
             print(e)
             sys.exit(1)