Skip to content

Commit d88e72a

Browse files
committed
github-release: backport changes
tuna/tunasync-scripts#193
1 parent 4fcd514 commit d88e72a

File tree

1 file changed

+21
-19
lines changed

1 file changed

+21
-19
lines changed

github-release/tunasync/github-release.py

Lines changed: 21 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
import concurrent.futures
33
import logging
44
import os
5+
import re
56
import tempfile
67
from datetime import datetime
78
from pathlib import Path
@@ -158,9 +159,11 @@ def process_release(
158159
release: dict,
159160
release_dir: Path,
160161
tarball: bool,
162+
exclude_regexes: list[str],
161163
) -> int:
162-
164+
163165
release_size = 0
166+
exclude_re = re.compile("|".join(exclude_regexes)) if exclude_regexes else None
164167

165168
if tarball:
166169
url = release["tarball_url"]
@@ -183,6 +186,9 @@ def process_release(
183186
)
184187

185188
for asset in release["assets"]:
189+
if exclude_re and exclude_re.search(asset["name"]):
190+
logger.info(f"excluding {asset['name']} by regex")
191+
continue
186192
url = asset["browser_download_url"]
187193
updated = datetime.strptime(
188194
asset["updated_at"], "%Y-%m-%dT%H:%M:%SZ"
@@ -245,25 +251,20 @@ def link_latest(name: str, repo_dir: Path) -> None:
245251
total_size = 0
246252

247253
for cfg in REPOS:
248-
flat = False # build a folder for each release
249-
versions = 1 # keep only one release
250-
tarball = False # do not download the tarball
251-
prerelease = False # filter out pre-releases
252-
perpage = 0
253254
if isinstance(cfg, str):
254-
repo = cfg
255-
else:
256-
repo = cfg["repo"]
257-
if "versions" in cfg:
258-
versions = cfg["versions"]
259-
if "flat" in cfg:
260-
flat = cfg["flat"]
261-
if "tarball" in cfg:
262-
tarball = cfg["tarball"]
263-
if "pre_release" in cfg:
264-
prerelease = cfg["pre_release"]
265-
if "per_page" in cfg:
266-
perpage = cfg["per_page"]
255+
cfg = {"repo": cfg}
256+
repo = cfg["repo"]
257+
versions = cfg.get("versions", 1) # keep # of latest releases
258+
flat = cfg.get("flat", False) # build a folder for each release
259+
tarball = cfg.get("tarball", False) # download source tarball
260+
prerelease = cfg.get("prerelease", False) # include pre-releases
261+
perpage = cfg.get("per_page", 0) # number of releases per page
262+
exclude_regexes = cfg.get("exclude", []) # list of file name regexes to exclude
263+
264+
assert type(perpage) is int and perpage >= 0, "`per_page` must be a non-negative integer"
265+
assert type(tarball) is bool, "`tarball` must be a boolean"
266+
assert type(exclude_regexes) is list, "`exclude` must be a list of regex strings"
267+
assert type(versions) is int and versions >= 0, "`versions` must be a non-negative integer"
267268

268269
repo_dir = working_dir / Path(repo)
269270
logger.info(f"syncing {repo} to {repo_dir}")
@@ -292,6 +293,7 @@ def link_latest(name: str, repo_dir: Path) -> None:
292293
release,
293294
(repo_dir if flat else repo_dir / name),
294295
tarball,
296+
exclude_regexes
295297
)
296298
if n_downloaded == 0 and not flat:
297299
# create a symbolic link to the latest release folder

0 commit comments

Comments
 (0)