2 files changed, 24 insertions, 13 deletions
diff --git a/changelog.d/17803.misc b/changelog.d/17803.misc
new file mode 100644
index 0000000000..a267df8b83
--- /dev/null
+++ b/changelog.d/17803.misc
@@ -0,0 +1 @@
+Test github token before running release script steps.
diff --git a/scripts-dev/release.py b/scripts-dev/release.py
index 4435624267..b14b61c705 100755
--- a/scripts-dev/release.py
+++ b/scripts-dev/release.py
@@ -40,7 +40,7 @@ import commonmark
import git
from click.exceptions import ClickException
from git import GitCommandError, Repo
-from github import Github
+from github import BadCredentialsException, Github
from packaging import version
@@ -323,10 +323,8 @@ def tag(gh_token: Optional[str]) -> None:
def _tag(gh_token: Optional[str]) -> None:
"""Tags the release and generates a draft GitHub release"""
- if gh_token:
- # Test that the GH Token is valid before continuing.
- gh = Github(gh_token)
- gh.get_user()
+ # Test that the GH Token is valid before continuing.
+ check_valid_gh_token(gh_token)
# Make sure we're in a git repo.
repo = get_repo_and_check_clean_checkout()
@@ -469,10 +467,8 @@ def upload(gh_token: Optional[str]) -> None:
def _upload(gh_token: Optional[str]) -> None:
"""Upload release to pypi."""
- if gh_token:
- # Test that the GH Token is valid before continuing.
- gh = Github(gh_token)
- gh.get_user()
+ # Test that the GH Token is valid before continuing.
+ check_valid_gh_token(gh_token)
current_version = get_package_version()
tag_name = f"v{current_version}"
@@ -569,10 +565,8 @@ def wait_for_actions(gh_token: Optional[str]) -> None:
def _wait_for_actions(gh_token: Optional[str]) -> None:
- if gh_token:
- # Test that the GH Token is valid before continuing.
- gh = Github(gh_token)
- gh.get_user()
+ # Test that the GH Token is valid before continuing.
+ check_valid_gh_token(gh_token)
# Find out the version and tag name.
current_version = get_package_version()
@@ -806,6 +800,22 @@ def get_repo_and_check_clean_checkout(
return repo
+def check_valid_gh_token(gh_token: Optional[str]) -> None:
+ """Check that a github token is valid, if supplied"""
+
+ if not gh_token:
+ # No github token supplied, so nothing to do.
+ return
+
+ try:
+ gh = Github(gh_token)
+
+ # We need to lookup name to trigger a request.
+ _name = gh.get_user().name
+ except BadCredentialsException as e:
+ raise click.ClickException(f"Github credentials are bad: {e}")
+
+
def find_ref(repo: git.Repo, ref_name: str) -> Optional[git.HEAD]:
"""Find the branch/ref, looking first locally then in the remote."""
if ref_name in repo.references:
|