From e2042058f1afc117d1c287564f2d45c49253a4bf Mon Sep 17 00:00:00 2001 From: Christoph Reiter Date: Fri, 7 Mar 2025 11:52:33 +0100 Subject: [PATCH] gh: improve repo caching We were caching based on the build type, but for most build types the repo is the same, so cache one level below instead. --- msys2_autobuild/build.py | 4 ++-- msys2_autobuild/cmd_upload_assets.py | 4 ++-- msys2_autobuild/gh.py | 18 ++++++++++-------- 3 files changed, 14 insertions(+), 12 deletions(-) diff --git a/msys2_autobuild/build.py b/msys2_autobuild/build.py index 8f6e3f1..d077bb7 100644 --- a/msys2_autobuild/build.py +++ b/msys2_autobuild/build.py @@ -17,7 +17,7 @@ from github.GitReleaseAsset import GitReleaseAsset from .config import ArchType, BuildType, Config from .gh import (CachedAssets, download_asset, get_asset_filename, - get_current_run_urls, get_release, get_repo, upload_asset, + get_current_run_urls, get_release, get_repo_for_build_type, upload_asset, wait_for_api_limit_reset) from .queue import Package from .utils import SCRIPT_DIR, PathLike @@ -304,7 +304,7 @@ def build_package(build_type: BuildType, pkg: Package, msys2_root: PathLike, bui repo_dir = os.path.join(builddir, repo_name) to_upload: List[str] = [] - repo = get_repo(build_type) + repo = get_repo_for_build_type(build_type) with fresh_git_repo(pkg['repo_url'], repo_dir): orig_pkg_dir = os.path.join(repo_dir, pkg['repo_path']) diff --git a/msys2_autobuild/cmd_upload_assets.py b/msys2_autobuild/cmd_upload_assets.py index bbe4f13..cc7ec99 100644 --- a/msys2_autobuild/cmd_upload_assets.py +++ b/msys2_autobuild/cmd_upload_assets.py @@ -2,7 +2,7 @@ import glob import os from typing import Any -from .gh import get_release, get_repo, upload_asset +from .gh import get_release, get_repo_for_build_type, upload_asset from .queue import PackageStatus, get_buildqueue_with_status @@ -46,7 +46,7 @@ def upload_assets(args: Any) -> None: print(f"Found {len(matches)} files..") for build_type, match in matches: - repo = get_repo(build_type) + repo = get_repo_for_build_type(build_type) release = get_release(repo, 'staging-' + build_type) print(f"Uploading {match}") if not args.dry_run: diff --git a/msys2_autobuild/gh.py b/msys2_autobuild/gh.py index 0e823c7..a30006e 100644 --- a/msys2_autobuild/gh.py +++ b/msys2_autobuild/gh.py @@ -51,16 +51,18 @@ def make_writable(obj: GithubObject) -> Generator: @lru_cache(maxsize=None) +def _get_repo(name: str, write: bool = False) -> Repository: + gh = get_github(write=write) + return gh.get_repo(name, lazy=True) + + def get_current_repo(write: bool = False) -> Repository: - gh = get_github(write=write) repo_full_name = os.environ.get("GITHUB_REPOSITORY", "msys2/msys2-autobuild") - return gh.get_repo(repo_full_name, lazy=True) + return _get_repo(repo_full_name, write) -@lru_cache(maxsize=None) -def get_repo(build_type: BuildType, write: bool = False) -> Repository: - gh = get_github(write=write) - return gh.get_repo(Config.ASSETS_REPO[build_type], lazy=True) +def get_repo_for_build_type(build_type: BuildType, write: bool = False) -> Repository: + return _get_repo(Config.ASSETS_REPO[build_type], write) @lru_cache(maxsize=None) @@ -278,13 +280,13 @@ class CachedAssets: def get_assets(self, build_type: BuildType) -> List[GitReleaseAsset]: if build_type not in self._assets: - repo = get_repo(build_type) + repo = get_repo_for_build_type(build_type) release = get_release(repo, 'staging-' + build_type) self._assets[build_type] = get_release_assets(release) return self._assets[build_type] def get_failed_assets(self, build_type: BuildType) -> List[GitReleaseAsset]: - repo = get_repo(build_type) + repo = get_repo_for_build_type(build_type) key = repo.full_name if key not in self._failed: release = get_release(repo, 'staging-failed')