fix(scanner): fail-fast skip on GitHub rate limit (plain urllib3 Retry)

Replace PyGithub's default GithubRetry (which sleeps until rate-limit
reset and retries up to 10x) with a plain urllib3 Retry. A rate-limit
403/429 is no longer in status_forcelist, so it raises
RateLimitExceededException immediately; renew_stat's except-block
catches it and skips. Transient 5xx errors remain retried (D2).

[#1-sub-2]
This commit is contained in:
Dr.Lt.Data 2026-06-28 23:45:43 +09:00
parent c352b16bb1
commit dba1b7742b

View File

@ -17,6 +17,7 @@ builtin_nodes = set()
import sys import sys
from urllib.parse import urlparse from urllib.parse import urlparse
from urllib3.util.retry import Retry
from github import Github, Auth from github import Github, Auth
from pathlib import Path from pathlib import Path
from typing import Set, Dict, Optional from typing import Set, Dict, Optional
@ -1619,7 +1620,14 @@ if __name__ == "__main__":
if not skip_stat_update: if not skip_stat_update:
auth = Auth.Token(os.environ.get('GITHUB_TOKEN')) auth = Auth.Token(os.environ.get('GITHUB_TOKEN'))
g = Github(auth=auth) # Use a plain urllib3 Retry (NOT PyGithub's default GithubRetry) so that
# a GitHub rate-limit response (403/429) raises RateLimitExceededException
# IMMEDIATELY instead of sleeping until the rate-limit reset and retrying
# up to 10x. The except-block in renew_stat() then catches it and skips
# (returns None). 403/429 are intentionally NOT in status_forcelist, so
# they fail fast; only transient 5xx errors are retried.
g = Github(auth=auth, retry=Retry(total=2, backoff_factor=0.5,
status_forcelist=[500, 502, 503, 504]))
else: else:
g = None g = None