forked from AlmightyHak/extensions-source
Initial commit
This commit is contained in:
commit
98ed7e8839
2263 changed files with 108711 additions and 0 deletions
75
.github/scripts/bump-versions.py
vendored
Normal file
75
.github/scripts/bump-versions.py
vendored
Normal file
|
@ -0,0 +1,75 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
from concurrent.futures import Future, ThreadPoolExecutor, as_completed
|
||||
import itertools
|
||||
from pathlib import Path
|
||||
import re
|
||||
import subprocess
|
||||
import sys
|
||||
|
||||
VERSION_STR = "VersionCode ="
|
||||
VERSION_REGEX = re.compile(f"{VERSION_STR} (\\d+)")
|
||||
BUMPED_FILES: list[Path] = []
|
||||
|
||||
BOT_EMAIL = "aniyomi-bot@aniyomi.org"
|
||||
BOT_NAME = "aniyomi-bot[bot]"
|
||||
|
||||
def has_match(query: str, file: Path) -> tuple[Path, bool]:
|
||||
return (file, query in file.read_text())
|
||||
|
||||
def find_files_with_match(query: str, include_multisrc: bool = True) -> list[Path]:
|
||||
files = Path("src").glob("*/*/build.gradle")
|
||||
if include_multisrc:
|
||||
files = itertools.chain(files, Path("lib-multisrc").glob("*/build.gradle.kts"))
|
||||
|
||||
# Prevent bumping files twice.
|
||||
files = filter(lambda file: file not in BUMPED_FILES, files)
|
||||
|
||||
# Use multiple threads to find matches.
|
||||
with ThreadPoolExecutor() as executor:
|
||||
futures = [executor.submit(has_match, query, file) for file in files]
|
||||
results = map(Future.result, as_completed(futures))
|
||||
return [path for path, result in results if result]
|
||||
|
||||
def replace_version(match: re.Match) -> str:
|
||||
version = int(match.group(1))
|
||||
print(f"{version} -> {version + 1}")
|
||||
return f"{VERSION_STR} {version + 1}"
|
||||
|
||||
def bump_version(file: Path):
|
||||
BUMPED_FILES.append(file)
|
||||
with file.open("r+") as f:
|
||||
print(f"\n{file}: ", end="")
|
||||
text = VERSION_REGEX.sub(replace_version, f.read())
|
||||
# Move the cursor to the start again, to prevent writing at the end
|
||||
f.seek(0)
|
||||
f.write(text)
|
||||
|
||||
def bump_lib_multisrc(theme: str):
|
||||
for file in find_files_with_match(f"themePkg = '{theme}'", include_multisrc=False):
|
||||
bump_version(file)
|
||||
|
||||
def commit_changes():
|
||||
paths = [str(path.resolve()) for path in BUMPED_FILES]
|
||||
subprocess.check_call(["git", "config", "--local", "user.email", BOT_EMAIL])
|
||||
subprocess.check_call(["git", "config", "--local", "user.name", BOT_NAME])
|
||||
subprocess.check_call(["git", "add"] + paths)
|
||||
subprocess.check_call(["git", "commit", "-S", "-m", "[skip ci] chore: Mass-bump on extensions"])
|
||||
subprocess.check_call(["git", "push"])
|
||||
|
||||
if __name__ == "__main__":
|
||||
if len(sys.argv) > 1:
|
||||
# Regex to match the lib name in the path, like "unpacker" or "dood-extractor".
|
||||
lib_regex = re.compile(r"lib/([a-z0-9-]+)/")
|
||||
# Find matches and remove None results.
|
||||
matches = filter(None, map(lib_regex.search, sys.argv[1:]))
|
||||
for match in matches:
|
||||
project_path = ":lib:" + match.group(1)
|
||||
for file in find_files_with_match(project_path):
|
||||
if file.parent.parent.name == "lib-multisrc":
|
||||
bump_lib_multisrc(file.parent.name)
|
||||
else:
|
||||
bump_version(file)
|
||||
|
||||
if len(BUMPED_FILES) > 0:
|
||||
commit_changes()
|
Loading…
Add table
Add a link
Reference in a new issue