From 125f05e424483ac2cba7f4e7e3977997a54d5b79 Mon Sep 17 00:00:00 2001 From: iBug Date: Sun, 8 Feb 2026 16:18:00 +0800 Subject: [PATCH] github-release.py: Exclude assets by regex --- github-release.py | 36 +++++++++++++++++------------------- 1 file changed, 17 insertions(+), 19 deletions(-) diff --git a/github-release.py b/github-release.py index 7c91600..adfd72b 100755 --- a/github-release.py +++ b/github-release.py @@ -3,6 +3,7 @@ import json import logging import os +import re import tempfile from datetime import datetime from pathlib import Path @@ -127,9 +128,11 @@ def process_release( release: dict, release_dir: Path, tarball: bool, + exclude_regexes: list[str], ) -> int: - + release_size = 0 + exclude_re = re.compile("|".join(exclude_regexes)) if exclude_regexes else None if tarball: url = release["tarball_url"] @@ -152,6 +155,10 @@ def process_release( ) for asset in release["assets"]: + if exclude_re and exclude_re.search(asset["name"]): + logger.info(f"excluding {asset['name']} by regex") + continue + url = asset["browser_download_url"] updated = datetime.strptime( asset["updated_at"], "%Y-%m-%dT%H:%M:%SZ" @@ -214,25 +221,15 @@ def link_latest(name: str, repo_dir: Path) -> None: total_size = 0 for cfg in REPOS: - flat = False # build a folder for each release - versions = 1 # keep only one release - tarball = False # do not download the tarball - prerelease = False # filter out pre-releases - perpage = 0 if isinstance(cfg, str): - repo = cfg - else: - repo = cfg["repo"] - if "versions" in cfg: - versions = cfg["versions"] - if "flat" in cfg: - flat = cfg["flat"] - if "tarball" in cfg: - tarball = cfg["tarball"] - if "pre_release" in cfg: - prerelease = cfg["pre_release"] - if "per_page" in cfg: - perpage = cfg["per_page"] + cfg = {"repo": cfg} + repo = cfg["repo"] + versions = cfg.get("versions", 1) # keep # of latest releases + flat = cfg.get("flat", False) # build a folder for each release + tarball = cfg.get("tarball", False) # download source tarball + prerelease = cfg.get("pre_release", False) # include pre-releases + perpage = cfg.get("per_page", 0) # number of releases per page + exclude_regexes = cfg.get("exclude", []) # list of file name regexes to exclude repo_dir = working_dir / Path(repo) logger.info(f"syncing {repo} to {repo_dir}") @@ -261,6 +258,7 @@ def link_latest(name: str, repo_dir: Path) -> None: release, (repo_dir if flat else repo_dir / name), tarball, + exclude_regexes, ) if n_downloaded == 0 and not flat: # create a symbolic link to the latest release folder