fix: adding rate limit warning at verify token permission stage (#14756)

This commit is contained in:
Douglas Yang
2025-12-09 17:21:04 -08:00
committed by GitHub
parent cbc7dcdaa7
commit c8d74feb06

View File

@@ -13,6 +13,15 @@ from urllib.error import HTTPError
from urllib.request import Request, urlopen
def is_rate_limit_error(e):
"""Check if an exception is a rate limit error"""
return (
isinstance(e, HTTPError)
and e.code in [403, 429]
and "rate limit exceeded" in getattr(e, "error_body", "").lower()
)
def make_github_request(url, token, method="GET", data=None):
"""Make authenticated request to GitHub API"""
headers = {
@@ -56,6 +65,9 @@ def verify_token_permissions(repo_owner, repo_name, token):
repo_data = json.loads(response)
print(f"Repository access verified: {repo_data['full_name']}")
except Exception as e:
if is_rate_limit_error(e):
warnings.warn("GitHub API rate limit exceeded during token verification.")
return "rate_limited"
print(f"Failed to access repository: {e}")
return False
@@ -65,6 +77,9 @@ def verify_token_permissions(repo_owner, repo_name, token):
response = make_github_request(url, token)
print("Repository contents access verified")
except Exception as e:
if is_rate_limit_error(e):
warnings.warn("GitHub API rate limit exceeded during token verification.")
return "rate_limited"
print(f"Failed to access repository contents: {e}")
return False
@@ -277,7 +292,14 @@ def publish_traces(traces_dir, run_id, run_number):
print(f"Found {len(files_to_upload)} files to upload")
# Verify token permissions before proceeding
if not verify_token_permissions(repo_owner, repo_name, token):
permission_check = verify_token_permissions(repo_owner, repo_name, token)
if permission_check == "rate_limited":
warnings.warn(
"Skipping trace upload due to GitHub API rate limit. "
"This is expected during high CI activity and does not indicate a test failure."
)
return
elif not permission_check:
print(
"Token permission verification failed. Please check the token permissions."
)
@@ -340,11 +362,7 @@ def publish_traces(traces_dir, run_id, run_number):
error_type = f"HTTP {e.code}"
# Check for rate limit errors (non-fatal - just warn and skip)
if (
isinstance(e, HTTPError)
and e.code in [403, 429]
and "rate limit exceeded" in getattr(e, "error_body", "").lower()
):
if is_rate_limit_error(e):
warnings.warn("GitHub API rate limit exceeded. Skipping trace upload.")
return