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.
This commit is contained in:
Christoph Reiter 2025-03-07 11:52:33 +01:00
parent bb54adc298
commit e2042058f1
3 changed files with 14 additions and 12 deletions

View File

@ -17,7 +17,7 @@ from github.GitReleaseAsset import GitReleaseAsset
from .config import ArchType, BuildType, Config from .config import ArchType, BuildType, Config
from .gh import (CachedAssets, download_asset, get_asset_filename, 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) wait_for_api_limit_reset)
from .queue import Package from .queue import Package
from .utils import SCRIPT_DIR, PathLike 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) repo_dir = os.path.join(builddir, repo_name)
to_upload: List[str] = [] 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): with fresh_git_repo(pkg['repo_url'], repo_dir):
orig_pkg_dir = os.path.join(repo_dir, pkg['repo_path']) orig_pkg_dir = os.path.join(repo_dir, pkg['repo_path'])

View File

@ -2,7 +2,7 @@ import glob
import os import os
from typing import Any 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 from .queue import PackageStatus, get_buildqueue_with_status
@ -46,7 +46,7 @@ def upload_assets(args: Any) -> None:
print(f"Found {len(matches)} files..") print(f"Found {len(matches)} files..")
for build_type, match in matches: 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) release = get_release(repo, 'staging-' + build_type)
print(f"Uploading {match}") print(f"Uploading {match}")
if not args.dry_run: if not args.dry_run:

View File

@ -51,16 +51,18 @@ def make_writable(obj: GithubObject) -> Generator:
@lru_cache(maxsize=None) @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: def get_current_repo(write: bool = False) -> Repository:
gh = get_github(write=write)
repo_full_name = os.environ.get("GITHUB_REPOSITORY", "msys2/msys2-autobuild") 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_for_build_type(build_type: BuildType, write: bool = False) -> Repository:
def get_repo(build_type: BuildType, write: bool = False) -> Repository: return _get_repo(Config.ASSETS_REPO[build_type], write)
gh = get_github(write=write)
return gh.get_repo(Config.ASSETS_REPO[build_type], lazy=True)
@lru_cache(maxsize=None) @lru_cache(maxsize=None)
@ -278,13 +280,13 @@ class CachedAssets:
def get_assets(self, build_type: BuildType) -> List[GitReleaseAsset]: def get_assets(self, build_type: BuildType) -> List[GitReleaseAsset]:
if build_type not in self._assets: 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) release = get_release(repo, 'staging-' + build_type)
self._assets[build_type] = get_release_assets(release) self._assets[build_type] = get_release_assets(release)
return self._assets[build_type] return self._assets[build_type]
def get_failed_assets(self, build_type: BuildType) -> List[GitReleaseAsset]: 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 key = repo.full_name
if key not in self._failed: if key not in self._failed:
release = get_release(repo, 'staging-failed') release = get_release(repo, 'staging-failed')