"""Provides components to build nix components and process the result.""" from __future__ import annotations import logging import re from tempfile import mkdtemp from flupdt.common import bash_wrapper drv_re = re.compile(r".*(/nix/store/.*\.drv).*") OUTPUT_DIR = mkdtemp(prefix="flupdt-outputs-") logger = logging.getLogger(__name__) def build_output(path: str, output: str) -> str | None: """Builds a given output in a flake. :param path: path to flake :param output: flake output to be built :returns the .drv path on success or None on failure """ logger.info(f"build {output}") logger.debug(f"outputting to {OUTPUT_DIR}/{output}.nixoutput") out = bash_wrapper(f"nix build {path}#{output} -o {OUTPUT_DIR}/{output}.nixoutput --accept-flake-config") logger.debug("output") logger.debug(out[0]) logger.debug("error") logger.debug(out[1]) logger.debug("statuscode") logger.debug(out[2]) if out[2] != 0: logger.warning(f"output {output} did not build correctly") return None return ""