diff --git a/scripts/ci/publish_traces.py b/scripts/ci/publish_traces.py index 31e18bcf00b6..d7f7a4aa6d7a 100644 --- a/scripts/ci/publish_traces.py +++ b/scripts/ci/publish_traces.py @@ -13,6 +13,15 @@ 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