mirror of
https://github.com/caelestia-dots/cli.git
synced 2026-06-18 15:00:00 -05:00
40 lines
1.4 KiB
Python
40 lines
1.4 KiB
Python
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}")
|