mirror of
https://github.com/Cheviiot/Nivora.git
synced 2026-08-03 15:51:12 +00:00
Maintain a validated cross-distribution package catalog. Automate upstream updates, isolated builds, diagnostics, and direct publication. Build the official GitHub Desktop sources for Linux with working OAuth.
72 lines
2.1 KiB
Python
Executable File
72 lines
2.1 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
from __future__ import annotations
|
|
|
|
import re
|
|
import shlex
|
|
from pathlib import Path
|
|
|
|
ROOT = Path(__file__).resolve().parents[1]
|
|
README = ROOT / "README.md"
|
|
|
|
|
|
def package_metadata(package: str) -> tuple[str, list[str]]:
|
|
text = (ROOT / package / "Staplerfile").read_text(encoding="utf-8")
|
|
version_match = re.search(
|
|
r"^version=(?:'([^']+)'|\"([^\"]+)\"|([^#\s]+))",
|
|
text,
|
|
re.MULTILINE,
|
|
)
|
|
if not version_match:
|
|
raise RuntimeError(f"{package}: version is missing")
|
|
version = next(
|
|
value for value in version_match.groups() if value is not None
|
|
)
|
|
|
|
architectures_match = re.search(
|
|
r"^architectures=\((.*?)\)", text, re.MULTILINE | re.DOTALL
|
|
)
|
|
if not architectures_match:
|
|
raise RuntimeError(f"{package}: architectures are missing")
|
|
architectures = shlex.split(architectures_match.group(1))
|
|
if not architectures:
|
|
raise RuntimeError(f"{package}: architectures are empty")
|
|
|
|
return version, architectures
|
|
|
|
|
|
def main() -> None:
|
|
lines = README.read_text(encoding="utf-8").splitlines()
|
|
package_dirs = sorted(
|
|
path.parent.name for path in ROOT.glob("*/Staplerfile")
|
|
)
|
|
|
|
for package in package_dirs:
|
|
command = f"stplr install nivora/{package}"
|
|
version, architectures = package_metadata(package)
|
|
matching_lines = [
|
|
index
|
|
for index, line in enumerate(lines)
|
|
if line.startswith("|") and command in line
|
|
]
|
|
if len(matching_lines) != 1:
|
|
raise RuntimeError(
|
|
f"{package}: expected one README catalog row, "
|
|
f"got {len(matching_lines)}"
|
|
)
|
|
|
|
index = matching_lines[0]
|
|
cells = lines[index].split("|")
|
|
if len(cells) != 6:
|
|
raise RuntimeError(f"{package}: malformed README catalog row")
|
|
cells[2] = f" `{version}` "
|
|
cells[3] = " " + ", ".join(
|
|
f"`{architecture}`" for architecture in architectures
|
|
) + " "
|
|
lines[index] = "|".join(cells)
|
|
|
|
README.write_text("\n".join(lines) + "\n", encoding="utf-8")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|