47 lines
2.1 KiB
Python
47 lines
2.1 KiB
Python
"""Record bionic tools and assemble the prepared fixed-prefix agent."""
|
|
from __future__ import annotations
|
|
|
|
import argparse
|
|
import json
|
|
from pathlib import Path
|
|
import sys
|
|
|
|
sys.path.insert(0, str(Path(__file__).resolve().parents[2]))
|
|
|
|
|
|
def write_facts(payload: Path, lock_path: Path, build_set: Path, tui: Path) -> None:
|
|
from pm.lock import Lockfile
|
|
from pm.registry import get_package
|
|
from scripts.bundles.payload import record_tools
|
|
from scripts.build.agent import assemble
|
|
from scripts.build.inputs import AgentInputs, RESOURCE_ENV, dependency_site
|
|
|
|
payload = payload.resolve()
|
|
target = "linux-arm64-bionic"
|
|
record_tools(payload, lock_path, target, {name: name for name in ("python", "node", "uv", "npm", "ffmpeg", "ripgrep")})
|
|
natives = [line.strip() for line in build_set.read_text(encoding="utf-8-sig").splitlines() if line.strip()]
|
|
(payload / "native-wheels.json").write_text(json.dumps(natives) + "\n", encoding="utf-8")
|
|
# This is the target pin, never the host's sys.version_info or sysconfig.
|
|
version = Lockfile(lock_path).version("python")
|
|
python = get_package("python").binary(payload / "tools/python", target)
|
|
if version is None or python is None:
|
|
raise ValueError("bionic Python pin/executable missing")
|
|
repo = payload / "app"
|
|
assemble(AgentInputs(
|
|
project=repo / "pyproject.toml", code=repo, repo="app", placement="fixed", target=target,
|
|
python=python,
|
|
site_packages=dependency_site(payload / "venv", version, target),
|
|
environment=payload / "venv", tools=payload / "tools", pm_runtime=payload / "pm-runtime",
|
|
resources={name: repo / name for name in RESOURCE_ENV}, frontends={"tui": tui.resolve()},
|
|
stamp=repo / "install-stamp.json",
|
|
), payload)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
parser = argparse.ArgumentParser(description=__doc__)
|
|
parser.add_argument("payload", type=Path)
|
|
parser.add_argument("build_set", type=Path)
|
|
parser.add_argument("--tui-product", type=Path, required=True)
|
|
args = parser.parse_args()
|
|
write_facts(args.payload, args.payload / "app/pm/lock.json", args.build_set, args.tui_product)
|