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
"""
from __future__ import print_function, unicode_literals
import sys
from path import path
from git import Repo, Commit
from git.refs.symbolic import SymbolicReference
import argparse
from datetime import date, timedelta
from dateutil.parser import parse as parse_datestring
import re
import collections
import functools
import textwrap
import requests
import json
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:
from pygments.console import colorize
except ImportError:
......@@ -149,10 +156,58 @@ def create_github_creds():
headers=headers, data=json.dumps(payload),
)
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"])
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):
"""
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