Commit 619f72f3 by David Baumgold

Merge pull request #4767 from edx/release-script-validation-failed

Improvements to the release.py script
parents b9a285f1 f4bfe464
...@@ -4,19 +4,26 @@ a release-master multitool ...@@ -4,19 +4,26 @@ a release-master multitool
""" """
from __future__ import print_function, unicode_literals from __future__ import print_function, unicode_literals
import sys import sys
from path import path
from git import Repo, Commit
from git.refs.symbolic import SymbolicReference
import argparse import argparse
from datetime import date, timedelta from datetime import date, timedelta
from dateutil.parser import parse as parse_datestring
import re import re
import collections import collections
import functools import functools
import textwrap import textwrap
import requests
import json import json
import getpass import getpass
try:
from path import path
from git import Repo, Commit
from git.refs.symbolic import SymbolicReference
from dateutil.parser import parse as parse_datestring
import requests
except ImportError:
print("Error: missing dependencies! Please run this command to install them:")
print("pip install path.py requests python-dateutil GitPython==0.3.2.RC1")
sys.exit(1)
try: try:
from pygments.console import colorize from pygments.console import colorize
except ImportError: except ImportError:
...@@ -149,10 +156,58 @@ def create_github_creds(): ...@@ -149,10 +156,58 @@ def create_github_creds():
headers=headers, data=json.dumps(payload), headers=headers, data=json.dumps(payload),
) )
if not response.ok: if not response.ok:
raise requests.exceptions.RequestException(response.json()["message"]) message = response.json()["message"]
if message != "Validation Failed":
raise requests.exceptions.RequestException(message)
else:
# A token called "edx-release" already exists on Github.
# Delete it, and try again.
token_id = get_github_auth_id(username, password, "edx-release")
if token_id:
delete_github_auth_token(username, password, token_id)
response = requests.post(
"https://api.github.com/authorizations",
auth=(username, password),
headers=headers, data=json.dumps(payload),
)
if not response.ok:
message = response.json()["message"]
raise requests.exceptions.RequestException(message)
return (username, response.json()["token"]) return (username, response.json()["token"])
def get_github_auth_id(username, password, note):
"""
Return the ID associated with the Github auth token with the given note.
If no such auth token exists, return None.
"""
response = requests.get(
"https://api.github.com/authorizations",
auth=(username, password),
headers={"User-Agent": "edx-release"},
)
if not response.ok:
message = response.json()["message"]
raise requests.exceptions.RequestException(message)
for auth_token in response.json():
if auth_token["note"] == "edx-release":
return auth_token["id"]
return None
def delete_github_auth_token(username, password, token_id):
response = requests.delete(
"https://api.github.com/authorizations/{id}".format(id=token_id),
auth=(username, password),
headers={"User-Agent": "edx-release"},
)
if not response.ok:
message = response.json()["message"]
raise requests.exceptions.RequestException(message)
def ensure_github_creds(attempts=3): def ensure_github_creds(attempts=3):
""" """
Make sure that we have Github OAuth credentials. This will check the user's Make sure that we have Github OAuth credentials. This will check the user's
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment