diff --git a/pkgs/by-name/ni/nixos-rebuild-ng/src/nixos_rebuild/nix.py b/pkgs/by-name/ni/nixos-rebuild-ng/src/nixos_rebuild/nix.py index dc95b914b360b..344350687774c 100644 --- a/pkgs/by-name/ni/nixos-rebuild-ng/src/nixos_rebuild/nix.py +++ b/pkgs/by-name/ni/nixos-rebuild-ng/src/nixos_rebuild/nix.py @@ -86,7 +86,18 @@ def build_flake( flake.to_attr(attr), *dict_to_flags(flake_build_flags), ] - r = run_wrapper(run_args, stdout=PIPE, stderr=PIPE if quiet else None) + r = run_wrapper( + run_args, + stdout=PIPE, + stderr=PIPE if quiet else None, + # Running build inside tmpdir thanks to this nasty bug from `nix` + # that happens when `nix build` is run from a symlink pointing to the + # nix store (e.g., /run/opengl-driver/lib) + # See: + # - https://github.com/NixOS/nix/issues/13367 + # - https://github.com/NixOS/nixpkgs/issues/144811 + cwd=tmpdir.TMPDIR_PATH, + ) return Path(r.stdout.strip()) diff --git a/pkgs/by-name/ni/nixos-rebuild-ng/src/nixos_rebuild/process.py b/pkgs/by-name/ni/nixos-rebuild-ng/src/nixos_rebuild/process.py index 462c4178e8f7a..43800e50ba091 100644 --- a/pkgs/by-name/ni/nixos-rebuild-ng/src/nixos_rebuild/process.py +++ b/pkgs/by-name/ni/nixos-rebuild-ng/src/nixos_rebuild/process.py @@ -7,6 +7,7 @@ import subprocess from collections.abc import Sequence from dataclasses import dataclass +from pathlib import Path from typing import Final, Self, TypedDict, Unpack from . import tmpdir @@ -67,6 +68,7 @@ def _validate_opts(opts: list[str], ask_sudo_password: bool | None) -> None: # Not exhaustive, but we can always extend it later. class RunKwargs(TypedDict, total=False): capture_output: bool + cwd: str | Path | None stderr: int | None stdout: int | None diff --git a/pkgs/by-name/ni/nixos-rebuild-ng/src/tests/test_main.py b/pkgs/by-name/ni/nixos-rebuild-ng/src/tests/test_main.py index 22b7054000a89..914dac8211b7d 100644 --- a/pkgs/by-name/ni/nixos-rebuild-ng/src/tests/test_main.py +++ b/pkgs/by-name/ni/nixos-rebuild-ng/src/tests/test_main.py @@ -11,6 +11,7 @@ from pytest import MonkeyPatch import nixos_rebuild as nr +from nixos_rebuild import tmpdir from .helpers import get_qualified_name @@ -409,6 +410,7 @@ def run_side_effect(args: list[str], **kwargs: Any) -> CompletedProcess[str]: check=True, stdout=PIPE, stderr=None, + cwd=tmpdir.TMPDIR_PATH, **DEFAULT_RUN_KWARGS, ), call( @@ -477,6 +479,7 @@ def run_side_effect(args: list[str], **kwargs: Any) -> CompletedProcess[str]: check=True, stdout=PIPE, stderr=None, + cwd=tmpdir.TMPDIR_PATH, **DEFAULT_RUN_KWARGS, ), call( @@ -768,6 +771,7 @@ def run_side_effect(args: list[str], **kwargs: Any) -> CompletedProcess[str]: check=True, stdout=PIPE, stderr=None, + cwd=tmpdir.TMPDIR_PATH, **DEFAULT_RUN_KWARGS, ), call( @@ -1076,6 +1080,7 @@ def run_side_effect(args: list[str], **kwargs: Any) -> CompletedProcess[str]: check=True, stdout=PIPE, stderr=None, + cwd=tmpdir.TMPDIR_PATH, **DEFAULT_RUN_KWARGS, ), call( diff --git a/pkgs/by-name/ni/nixos-rebuild-ng/src/tests/test_nix.py b/pkgs/by-name/ni/nixos-rebuild-ng/src/tests/test_nix.py index 195f929aaf534..661a19e0b2bf0 100644 --- a/pkgs/by-name/ni/nixos-rebuild-ng/src/tests/test_nix.py +++ b/pkgs/by-name/ni/nixos-rebuild-ng/src/tests/test_nix.py @@ -79,6 +79,7 @@ def test_build_flake(mock_run: Mock, monkeypatch: MonkeyPatch, tmpdir: Path) -> ], stdout=PIPE, stderr=None, + cwd=ANY, ) assert n.build_flake( @@ -98,6 +99,7 @@ def test_build_flake(mock_run: Mock, monkeypatch: MonkeyPatch, tmpdir: Path) -> ], stdout=PIPE, stderr=PIPE, + cwd=ANY, )