mirror of
https://github.com/caelestia-dots/cli.git
synced 2026-06-18 15:00:00 -05:00
refactor: reusable select prompt + hooks + local build
This commit is contained in:
@@ -0,0 +1,39 @@
|
||||
import os
|
||||
import subprocess
|
||||
|
||||
from caelestia.utils.dots.manifest import Manifest
|
||||
from caelestia.utils.dots.packages import PackageInstaller
|
||||
from caelestia.utils.dots.source import DotsSource
|
||||
from caelestia.utils.io import info, log, warn
|
||||
from caelestia.utils.paths import dots_dir
|
||||
|
||||
|
||||
def build_local_packages(installer: PackageInstaller, source: DotsSource, paths: list[str]) -> dict[str, list[str]]:
|
||||
"""Build and install each local PKGBUILD dir, returning {path: installed package names}."""
|
||||
|
||||
built: dict[str, list[str]] = {}
|
||||
for path in paths:
|
||||
directory = source.working_path(path)
|
||||
if not directory.is_dir():
|
||||
warn(f"missing in repo, skipping: {path}")
|
||||
continue
|
||||
log(f"Building {path}...")
|
||||
built[path] = installer.build_install(directory)
|
||||
return built
|
||||
|
||||
|
||||
def run_hooks(manifest: Manifest, kind: str) -> None:
|
||||
"""Run the global + enabled components' hooks of the given kind (e.g. "post_install")."""
|
||||
|
||||
hooks = manifest.enabled_hooks(kind)
|
||||
if not hooks:
|
||||
return
|
||||
|
||||
print()
|
||||
log(f"Running {kind.replace('_', '-')} hooks...")
|
||||
env = {**os.environ, "CAELESTIA_DOTS": str(dots_dir)}
|
||||
for hook in hooks:
|
||||
info(f"Running hook: {hook}")
|
||||
result = subprocess.run(hook, shell=True, env=env)
|
||||
if result.returncode != 0:
|
||||
warn(f"hook exited with {result.returncode}")
|
||||
Reference in New Issue
Block a user