From f76d6f93fc07afb70545c684bab5f647977094ab Mon Sep 17 00:00:00 2001 From: S1ro1 Date: Wed, 17 Dec 2025 03:49:31 +0100 Subject: [PATCH] Feat: cache workflow file --- src/libkernelbot/launchers/github.py | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/src/libkernelbot/launchers/github.py b/src/libkernelbot/launchers/github.py index d457d244..f07485f2 100644 --- a/src/libkernelbot/launchers/github.py +++ b/src/libkernelbot/launchers/github.py @@ -12,7 +12,9 @@ from typing import Awaitable, Callable, Optional import requests -from github import Github, UnknownObjectException, WorkflowRun +from github import Github, UnknownObjectException +from github.Workflow import Workflow +from github.WorkflowRun import WorkflowRun from libkernelbot.consts import ( AMD_REQUIREMENTS, @@ -172,6 +174,9 @@ class GitHubArtifact: public_download_url: str +_WORKFLOW_FILE_CACHE: dict[str, Workflow] = {} + + class GitHubRun: def __init__(self, repo: str, token: str, branch: str, workflow_file: str): gh = Github(token) @@ -209,6 +214,15 @@ def elapsed_time(self): return None return datetime.datetime.now(datetime.timezone.utc) - self.start_time + async def get_workflow(self) -> Workflow: + if self.workflow_file in _WORKFLOW_FILE_CACHE: + logger.info(f"Returning cached workflow {self.workflow_file}") + return _WORKFLOW_FILE_CACHE[self.workflow_file] + logger.info(f"Fetching workflow {self.workflow_file} from GitHub") + workflow = self.repo.get_workflow(self.workflow_file) + _WORKFLOW_FILE_CACHE[self.workflow_file] = workflow + return workflow + async def trigger(self, inputs: dict) -> bool: """ Trigger this run with the provided inputs. @@ -229,7 +243,7 @@ async def trigger(self, inputs: dict) -> bool: trigger_time = datetime.datetime.now(datetime.timezone.utc) try: - workflow = await asyncio.to_thread(self.repo.get_workflow, self.workflow_file) + workflow = await self.get_workflow() except UnknownObjectException as e: logger.error(f"Could not find workflow {self.workflow_file}", exc_info=e) raise ValueError(f"Could not find workflow {self.workflow_file}") from e