#!/usr/bin/env python3 """Build the TUI and package a prepared bionic payload as a Termux .deb. Tool staging and wheelhouse preparation remain separate prerequisites. This sequence owns only the shared frontend build and the native .deb handoff. """ from __future__ import annotations import argparse from pathlib import Path import subprocess import sys if __package__ in (None, ""): sys.path.insert(0, str(Path(__file__).resolve().parents[2])) from scripts.releases.commit_build import require_commit from scripts.termux.deb_version import deb_version_for_tag def main(argv: list[str] | None = None) -> int: parser = argparse.ArgumentParser(description=__doc__, allow_abbrev=False) parser.add_argument("--repo", type=Path, required=True) parser.add_argument("--payload", type=Path, required=True) parser.add_argument("--out", type=Path, required=True) identity = parser.add_mutually_exclusive_group(required=True) identity.add_argument("--tag") identity.add_argument("--commit") parser.add_argument("--release-commit") args = parser.parse_args(argv) try: if args.tag is not None: deb_version_for_tag(args.tag) else: require_commit(args.commit) if args.release_commit is not None: if args.tag is None: parser.error("--release-commit requires --tag") require_commit(args.release_commit) except ValueError as exc: parser.error(str(exc)) repo, payload, out = (path.resolve() for path in (args.repo, args.payload, args.out)) for option, path in (("--repo", repo), ("--payload", payload)): if not path.is_dir(): parser.error(f"{option} must name an existing directory: {path}") product = repo / ".build/termux/tui" revision = ["--tag", args.tag] if args.tag is not None else ["--commit", args.commit] if args.release_commit is not None: revision.extend(["--release-commit", args.release_commit]) commands = [ ["node", str(repo / "scripts/build/node-deps.mjs"), "--source", str(repo), "--workspace", "ui-tui"], ["node", str(repo / "scripts/build/tui.mjs"), "--source", str(repo), "--out", str(product)], ["bash", str(repo / "scripts/termux/build_deb.sh"), "--repo", str(repo), "--payload", str(payload), "--out", str(out), "--tui-product", str(product), *revision], ] try: for command in commands: subprocess.run(command, cwd=repo, check=True) except subprocess.CalledProcessError as exc: return exc.returncode except OSError as exc: print(f"termux build: {exc}", file=sys.stderr) return 1 return 0 if __name__ == "__main__": raise SystemExit(main())