FIX: Update GitHubCIHelper to use env vars for init

This commit is contained in:
cyclop-bot
2025-06-02 19:13:52 -05:00
parent 887bae3972
commit 664113d919
+33 -25
View File
@@ -15,40 +15,49 @@ class GitHubCIHelper(BaseTool): # Inherits from BaseTool
A helper class to interact with GitHub Actions CI, A helper class to interact with GitHub Actions CI,
specifically for fetching and analyzing test logs. specifically for fetching and analyzing test logs.
""" """
def __init__(self, repo_owner: str, repo_name: str, github_token: str = None, session=None, logger_instance=None): # Added session and logger_instance def __init__(self, repo_owner: str = None, repo_name: str = None, github_token: str = None, session=None, logger_instance=None):
""" # Call BaseTool's init. BaseTool's __init__ expects 'logger' as the arg name.
Initializes the GitHubCIHelper. super().__init__(logger=logger_instance)
Args: # Logger setup: Prefer logger_instance, then BaseTool's logger, then a default.
repo_owner (str): The owner of the GitHub repository (e.g., '''bucolucas'''). if logger_instance:
repo_name (str): The name of the GitHub repository (e.g., '''cyclop'''). self.logger = logger_instance
github_token (str, optional): A GitHub Personal Access Token (PAT) elif not hasattr(self, 'logger') or self.logger is None: # If BaseTool didn't set it or set to None
for API authentication. Recommended for self.logger = logging.getLogger(__name__ + '.' + self.__class__.__name__)
private repos or higher rate limits. # Ensure logger has handlers to prevent "No handlers could be found"
Can also be set via GITHUB_TOKEN env var. if not self.logger.handlers:
session (requests.Session, optional): An external requests session to use. self.logger.addHandler(logging.NullHandler())
logger_instance (logging.Logger, optional): An external logger instance.
""" # Repo owner and name handling
self.repo_owner = repo_owner if repo_owner and repo_name:
self.repo_name = repo_name self.repo_owner = repo_owner
self.repo_name = repo_name
else:
github_repository = os.environ.get("GITHUB_REPOSITORY")
if not github_repository or '/' not in github_repository:
self.logger.error("GITHUB_REPOSITORY environment variable not set or in incorrect format (expected 'owner/repo') and repo_owner/repo_name not provided during __init__.")
raise ValueError("GITHUB_REPOSITORY environment variable not set or in incorrect format (expected 'owner/repo') and repo_owner/repo_name not provided.")
self.repo_owner, self.repo_name = github_repository.split('/', 1)
self.logger.info(f"Initialized repo_owner/repo_name from GITHUB_REPOSITORY: {self.repo_owner}/{self.repo_name}")
self.base_url = f"https://api.github.com/repos/{self.repo_owner}/{self.repo_name}" self.base_url = f"https://api.github.com/repos/{self.repo_owner}/{self.repo_name}"
self._token = github_token or os.environ.get("GITHUB_TOKEN") # Renamed to _token for consistency self._token = github_token or os.environ.get("GITHUB_TOKEN")
if not self._token:
self.logger.warning("GitHub token not provided directly or via GITHUB_TOKEN. API requests may be rate-limited or fail for private resources.")
self.headers = { self.headers = {
"Accept": "application/vnd.github.v3+json" "Accept": "application/vnd.github.v3+json"
} }
if self._token: # Use self._token if self._token:
self.headers["Authorization"] = f"token {self._token}" self.headers["Authorization"] = f"token {self._token}"
if session: if session:
self.session = session self.session = session
else: else:
self.session = requests.Session() self.session = requests.Session()
# Headers are applied per-request in _make_request or directly where self.session is used if needed globally for session
self.logger.info(f"GitHubCIHelper initialized for {self.repo_owner}/{self.repo_name}.")
self.logger = logger_instance if logger_instance else logging.getLogger(__name__)
if not self.logger.handlers:
self.logger.addHandler(logging.NullHandler())
def get_functions(self): def get_functions(self):
return [ return [
@@ -400,4 +409,3 @@ if __name__ == "__main__":
else: else:
example_logger.info(f"No failed 'Python CI' workflow run found for PR #{pr_number} or the PR doesn't exist/no runs yet.") example_logger.info(f"No failed 'Python CI' workflow run found for PR #{pr_number} or the PR doesn't exist/no runs yet.")