diff --git a/src/common/utils.py b/src/common/utils.py index 2ca1620..4cee9de 100644 --- a/src/common/utils.py +++ b/src/common/utils.py @@ -172,7 +172,7 @@ def exit_unless_nix_artifact(path, force_realise=False): sys.exit(1) -def try_resolve_flakeref(flakeref, force_realise=False): +def try_resolve_flakeref(flakeref, force_realise=False, impure=False): """ Resolve flakeref to out-path, force-realising the output if `force_realise` is True. Returns resolved path if flakeref can be resolved to out-path, @@ -181,7 +181,8 @@ def try_resolve_flakeref(flakeref, force_realise=False): LOG.info("Evaluating '%s'", flakeref) exp = "--extra-experimental-features flakes " exp += "--extra-experimental-features nix-command" - cmd = f"nix eval --raw {flakeref} {exp}" + extra_args = "--impure" if impure else "" + cmd = f"nix eval --raw {flakeref} {exp} {extra_args}" ret = exec_cmd(cmd.split(), raise_on_error=False) if not ret: LOG.debug("not a flakeref: '%s'", flakeref) @@ -191,7 +192,7 @@ def try_resolve_flakeref(flakeref, force_realise=False): if not force_realise: return nixpath LOG.info("Try force-realising flakeref '%s'", flakeref) - cmd = f"nix build --no-link {flakeref} {exp}" + cmd = f"nix build --no-link {flakeref} {exp} {extra_args}" ret = exec_cmd(cmd.split(), raise_on_error=False, return_error=True) if not ret: LOG.fatal("Failed force_realising %s: %s", flakeref, ret.stderr) diff --git a/src/sbomnix/main.py b/src/sbomnix/main.py index 3bb5729..0f239e1 100755 --- a/src/sbomnix/main.py +++ b/src/sbomnix/main.py @@ -59,6 +59,8 @@ def getargs(): group.add_argument("--cdx", nargs="?", help=helps, default="sbom.cdx.json") helps = "Path to spdx json output file (default: ./sbom.spdx.json)" group.add_argument("--spdx", nargs="?", help=helps, default="sbom.spdx.json") + helps = "Run nix command with --impure" + parser.add_argument("--impure", help=helps, action="store_true") return parser.parse_args() @@ -72,7 +74,7 @@ def main(): set_log_verbosity(args.verbose) runtime = args.buildtime is False flakeref = None - target_path = try_resolve_flakeref(args.NIXREF, force_realise=runtime) + target_path = try_resolve_flakeref(args.NIXREF, force_realise=runtime, impure=args.impure) if target_path: flakeref = args.NIXREF else: