diff --git a/rcav2/env.py b/rcav2/env.py index c53fab0..47df793 100644 --- a/rcav2/env.py +++ b/rcav2/env.py @@ -43,6 +43,7 @@ def __init__( self.logjuicer_report: rcav2.models.errors.Report | None = None self.zuul_info: ZuulInfo | None = None self.zuul_info_age = 0.0 + self.repo_age = 0.0 self.httpx = make_httpx_client( settings.SF_DOMAIN, settings.CA_BUNDLE_PATH, settings.COOKIE_FILE ) @@ -70,6 +71,14 @@ def __init__( settings.SLACK_API_KEY, settings.SLACK_SEARCH_CHANNELS ) + def repo_need_update(self): + """Return True if repo_age is older than 1 hour""" + now = time.time() + if now - self.repo_age > 3600: + self.repo_age = now + return True + return False + def close(self): if self.cookie and self.cookie_path: with open(self.cookie_path, "w") as f: diff --git a/rcav2/tools/zuul.py b/rcav2/tools/zuul.py index b3c354a..6256bc5 100644 --- a/rcav2/tools/zuul.py +++ b/rcav2/tools/zuul.py @@ -82,7 +82,7 @@ def as_list(item: str | list[str]) -> list[str]: return item -async def get_job_playbooks(info: ZuulInfo, job_name: str): +async def get_job_playbooks(info: ZuulInfo, job_name: str, update: bool = False): plays: list[Path] = [] while True: job = info.jobs.get(job_name) @@ -90,7 +90,7 @@ async def get_job_playbooks(info: ZuulInfo, job_name: str): print(f"Unknown job: {job_name}") break if url := info.project_git(job.project): - path = await rcav2.tools.git.ensure_repo(url) + path = await rcav2.tools.git.ensure_repo(url, update) if job_def := read_job(path / job.path, job_name): plays.extend( map(lambda play: path / play, as_list(job_def.get("run", []))) diff --git a/rcav2/workflows.py b/rcav2/workflows.py index c759b0b..a8ed5cc 100644 --- a/rcav2/workflows.py +++ b/rcav2/workflows.py @@ -54,7 +54,8 @@ def load_job_description_file(dfile) -> str | None: async def job_from_model(env: Env, name: str, worker: Worker) -> Job | None: await worker.emit("Reading job plays...", event="progress") zuul_info = await rcav2.tools.zuul.ensure_zuul_info(env) - plays = await rcav2.tools.zuul.get_job_playbooks(zuul_info, name) + update = env.repo_need_update() + plays = await rcav2.tools.zuul.get_job_playbooks(zuul_info, name, update) if not plays: await worker.emit(f"Couldn't find job {name}", event="error") return None