Decouple non-UI CLI startup from config_ui

Stop aman.py from importing the GTK settings module at module load so version, init, bench, diagnostics, and top-level help can start without pulling in the UI stack.\n\nPromote PyGObject and python-xlib into main project dependencies, switch the documented source install surface to plain uv/pip commands, and teach the portable, deb, and Arch packaging flows to install filtered runtime requirements before the Aman wheel so they still rely on distro-provided GTK/X11 packages.\n\nAdd regression coverage for importing aman with config_ui blocked and for the portable bundle's new requirements payload, then rerun the focused CLI/diagnostics/portable tests plus py_compile.
This commit is contained in:
Thales Maciel 2026-03-14 13:38:15 -03:00
parent b4a3d446fa
commit 721248ca26
No known key found for this signature in database
GPG key ID: 33112E6833C34679
15 changed files with 173 additions and 35 deletions

View file

@ -75,8 +75,10 @@ def _build_fake_wheel(root: Path, version: str) -> Path:
def _bundle_dir(root: Path, version: str) -> Path:
bundle_dir = root / f"bundle-{version}"
(bundle_dir / "wheelhouse" / "common").mkdir(parents=True, exist_ok=True)
(bundle_dir / "requirements").mkdir(parents=True, exist_ok=True)
for tag in portable.SUPPORTED_PYTHON_TAGS:
(bundle_dir / "wheelhouse" / tag).mkdir(parents=True, exist_ok=True)
(bundle_dir / "requirements" / f"{tag}.txt").write_text("", encoding="utf-8")
(bundle_dir / "systemd").mkdir(parents=True, exist_ok=True)
shutil.copy2(PORTABLE_DIR / "install.sh", bundle_dir / "install.sh")
shutil.copy2(PORTABLE_DIR / "uninstall.sh", bundle_dir / "uninstall.sh")
@ -213,6 +215,9 @@ class PortableBundleTests(unittest.TestCase):
self.assertIn(f"{prefix}/wheelhouse/cp310", names)
self.assertIn(f"{prefix}/wheelhouse/cp311", names)
self.assertIn(f"{prefix}/wheelhouse/cp312", names)
self.assertIn(f"{prefix}/requirements/cp310.txt", names)
self.assertIn(f"{prefix}/requirements/cp311.txt", names)
self.assertIn(f"{prefix}/requirements/cp312.txt", names)
self.assertIn(f"{prefix}/systemd/aman.service.in", names)
def test_fresh_install_creates_managed_paths_and_starts_service(self):