mirror of
https://github.com/Cheviiot/Nivora.git
synced 2026-08-03 15:51:12 +00:00
Wrap the install command in backticks when matching README rows, so nivora/claude no longer matches inside the nivora/claude-alt row.
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()
|