From 9c92a81411867f51394d4e2e94a27faefae251e7 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" Date: Wed, 19 Mar 2025 13:40:12 +0000 Subject: [PATCH 1/7] chore(deps): update nixpkgs digest to 3549532 --- flake.lock | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/flake.lock b/flake.lock index 3df09c2ba..e109a256c 100644 --- a/flake.lock +++ b/flake.lock @@ -58,9 +58,9 @@ "nixpkgs": { "locked": { "lastModified": 315532800, - "narHash": "sha256-bV4oQApFGvOYLu8OBEeAkIIGe+/20WC9ObDuAqfGzkI=", + "narHash": "sha256-+BzPdWVevbkSpM12Hxc0pvl5bK4QVqBj/Aksrkgduq4=", "type": "tarball", - "url": "https://releases.nixos.org/nixpkgs/nixpkgs-25.05pre769684.9bc8a9093126/nixexprs.tar.xz" + "url": "https://releases.nixos.org/nixpkgs/nixpkgs-25.05pre769919.354953266373/nixexprs.tar.xz" }, "original": { "type": "tarball", From 79635efaa5bbe85b75b76cd481d449a4d2e4f6a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Thalheim?= Date: Wed, 19 Mar 2025 15:23:50 +0100 Subject: [PATCH 2/7] clan-vm-manager: support basic devshell on macOS --- pkgs/clan-vm-manager/default.nix | 22 ++++++++++++++-------- pkgs/clan-vm-manager/flake-module.nix | 23 +++++++++++------------ 2 files changed, 25 insertions(+), 20 deletions(-) diff --git a/pkgs/clan-vm-manager/default.nix b/pkgs/clan-vm-manager/default.nix index 5842ef44e..85f292747 100644 --- a/pkgs/clan-vm-manager/default.nix +++ b/pkgs/clan-vm-manager/default.nix @@ -19,6 +19,8 @@ setuptools, webkitgtk_6_0, wrapGAppsHook, + lib, + stdenv, }: let source = ./.; @@ -32,14 +34,18 @@ let }; # Dependencies that are directly used in the project but nor from internal python packages - externalPythonDeps = [ - pygobject3 - pygobject-stubs - gtk4 - libadwaita - webkitgtk_6_0 - adwaita-icon-theme - ] ++ clan-cli.propagatedBuildInputs; + externalPythonDeps = + [ + pygobject3 + pygobject-stubs + gtk4 + libadwaita + adwaita-icon-theme + ] + ++ clan-cli.propagatedBuildInputs + ++ lib.optionals (!stdenv.isDarwin) [ + webkitgtk_6_0 + ]; # Deps including python packages from the local project allPythonDeps = [ (python3.pkgs.toPythonModule clan-cli) ] ++ externalPythonDeps; diff --git a/pkgs/clan-vm-manager/flake-module.nix b/pkgs/clan-vm-manager/flake-module.nix index f0b172db8..35e934922 100644 --- a/pkgs/clan-vm-manager/flake-module.nix +++ b/pkgs/clan-vm-manager/flake-module.nix @@ -8,17 +8,16 @@ system, ... }: - if lib.elem system lib.platforms.darwin then - { } - else - { - devShells.clan-vm-manager = pkgs.callPackage ./shell.nix { - inherit (config.packages) clan-vm-manager; - }; - packages.clan-vm-manager = pkgs.python3.pkgs.callPackage ./default.nix { - inherit (config.packages) clan-cli; - }; - - checks = config.packages.clan-vm-manager.tests; + { + devShells.clan-vm-manager = pkgs.callPackage ./shell.nix { + inherit (config.packages) clan-vm-manager; }; + } + // lib.optionalAttrs (system != lib.platforms.darwin) { + packages.clan-vm-manager = pkgs.python3.pkgs.callPackage ./default.nix { + inherit (config.packages) clan-cli; + }; + + checks = config.packages.clan-vm-manager.tests; + }; } From 573c39e39561867f29e400dae0cfe0acd7caf11d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Thalheim?= Date: Wed, 19 Mar 2025 15:24:23 +0100 Subject: [PATCH 3/7] vm-manager: ignore interface between GObject and ListModel --- pkgs/clan-vm-manager/clan_vm_manager/components/gkvstore.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/pkgs/clan-vm-manager/clan_vm_manager/components/gkvstore.py b/pkgs/clan-vm-manager/clan_vm_manager/components/gkvstore.py index 33fa9a617..2d47820d6 100644 --- a/pkgs/clan-vm-manager/clan_vm_manager/components/gkvstore.py +++ b/pkgs/clan-vm-manager/clan_vm_manager/components/gkvstore.py @@ -18,7 +18,11 @@ V = TypeVar( ) # Value type, bound to GObject.GObject or its subclasses -class GKVStore(GObject.GObject, Gio.ListModel, Generic[K, V]): +# GObject and Gio.ListModel are not compatible with mypy, so we need to ignore the errors +# clan_vm_manager/components/gkvstore.py:21: error: Definition of "newv" in base class "Object" is incompatible with definition in base class "GInterface" [misc] +# clan_vm_manager/components/gkvstore.py:21: error: Definition of "install_properties" in base class "Object" is incompatible with definition in base class "GInterface" [misc] +# clan_vm_manager/components/gkvstore.py:21: error: Definition of "getv" in base class "Object" is incompatible with definition in base class "GInterface" [misc] +class GKVStore(GObject.GObject, Gio.ListModel, Generic[K, V]): # type: ignore[misc] """ A simple key-value store that implements the Gio.ListModel interface, with generic types for keys and values. Only use self[key] and del self[key] for accessing the items for better performance. From 490e54b278fbb0e9d4b0d21483b1e3d01193d61a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Thalheim?= Date: Wed, 19 Mar 2025 15:39:18 +0100 Subject: [PATCH 4/7] make sshd test work on macOS --- pkgs/clan-cli/tests/sshd.py | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/pkgs/clan-cli/tests/sshd.py b/pkgs/clan-cli/tests/sshd.py index 571c900aa..1b9281a34 100644 --- a/pkgs/clan-cli/tests/sshd.py +++ b/pkgs/clan-cli/tests/sshd.py @@ -76,16 +76,20 @@ exec {bash} -l "${{@}}" login_shell.chmod(0o755) lib_path = None - assert platform == "linux", ( - f"we do not support the ld_preload trick on non-linux just now. Got {platform}" - ) + + extension = ".so" + if platform == "darwin": + extension = ".dylib" + link_lib_flag = "-shared" + if platform == "darwin": + link_lib_flag = "-dynamiclib" # This enforces a login shell by overriding the login shell of `getpwnam(3)` - lib_path = tmpdir / "libgetpwnam-preload.so" + lib_path = tmpdir / f"libgetpwnam-preload.${extension}" subprocess.run( [ os.environ.get("CC", "cc"), - "-shared", + link_lib_flag, "-o", lib_path, str(test_root / "getpwnam-preload.c"), @@ -109,8 +113,12 @@ def sshd( sshd = shutil.which("sshd") assert sshd is not None, "no sshd binary found" env = {} + preload_env_name = "LD_PRELOAD" + if platform == "darwin": + preload_env_name = "DYLD_INSERT_LIBRARIES" + env = { - "LD_PRELOAD": str(sshd_config.preload_lib), + preload_env_name: str(sshd_config.preload_lib), "LOGIN_SHELL": str(sshd_config.login_shell), } proc = command.run( From 43035b85a572d8cde0bbda9ed8a72cee854bef87 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Thalheim?= Date: Wed, 19 Mar 2025 16:31:36 +0100 Subject: [PATCH 5/7] always resolve symlinks for TemporaryDirectory On macOS mktemp returns a temporary directory in a symlink. Nix has a bug where it won't accept path:// located in a symlink. This avoid this issue by always resolving symlinks as returned by TemporaryDirectory. --- pkgs/clan-app/tests/temporary_dir.py | 7 +-- pkgs/clan-cli/clan_cli/facts/generate.py | 4 +- pkgs/clan-cli/clan_cli/facts/upload.py | 4 +- pkgs/clan-cli/clan_cli/flash/flash.py | 4 +- pkgs/clan-cli/clan_cli/machines/install.py | 7 +-- pkgs/clan-cli/clan_cli/machines/morph.py | 4 +- pkgs/clan-cli/clan_cli/vars/generate.py | 4 +- .../vars/secret_modules/password_store.py | 4 +- .../clan_cli/vars/secret_modules/sops.py | 4 +- pkgs/clan-cli/tests/fixtures_flakes.py | 7 +-- pkgs/clan-cli/tests/temporary_dir.py | 13 ++--- pkgs/clan-cli/tests/test_clan_uri.py | 48 +++++++++---------- 12 files changed, 55 insertions(+), 55 deletions(-) diff --git a/pkgs/clan-app/tests/temporary_dir.py b/pkgs/clan-app/tests/temporary_dir.py index aaa54ca27..65c524b1d 100644 --- a/pkgs/clan-app/tests/temporary_dir.py +++ b/pkgs/clan-app/tests/temporary_dir.py @@ -19,9 +19,10 @@ def temporary_home(monkeypatch: pytest.MonkeyPatch) -> Iterator[Path]: monkeypatch.chdir(str(path)) yield path else: - with tempfile.TemporaryDirectory(prefix="pytest-") as dirpath: + with tempfile.TemporaryDirectory(prefix="pytest-") as _dirpath: + dirpath = Path(_dirpath) monkeypatch.setenv("HOME", str(dirpath)) - monkeypatch.setenv("XDG_CONFIG_HOME", str(Path(dirpath) / ".config")) + monkeypatch.setenv("XDG_CONFIG_HOME", str(dirpath / ".config")) monkeypatch.chdir(str(dirpath)) log.debug("Temp HOME directory: %s", str(dirpath)) - yield Path(dirpath) + yield dirpath diff --git a/pkgs/clan-cli/clan_cli/facts/generate.py b/pkgs/clan-cli/clan_cli/facts/generate.py index c5da1e3a6..be046117c 100644 --- a/pkgs/clan-cli/clan_cli/facts/generate.py +++ b/pkgs/clan-cli/clan_cli/facts/generate.py @@ -202,8 +202,8 @@ def generate_facts( prompt: Callable[[str, str], str] = prompt_func, ) -> bool: was_regenerated = False - with TemporaryDirectory(prefix="facts-generate-") as tmp: - tmpdir = Path(tmp) + with TemporaryDirectory(prefix="facts-generate-") as _tmpdir: + tmpdir = Path(_tmpdir).resolve() for machine in machines: errors = 0 diff --git a/pkgs/clan-cli/clan_cli/facts/upload.py b/pkgs/clan-cli/clan_cli/facts/upload.py index aff152d53..054714d8e 100644 --- a/pkgs/clan-cli/clan_cli/facts/upload.py +++ b/pkgs/clan-cli/clan_cli/facts/upload.py @@ -19,8 +19,8 @@ def upload_secrets(machine: Machine) -> None: machine.info("Secrets already uploaded") return - with TemporaryDirectory(prefix="facts-upload-") as tempdir: - local_secret_dir = Path(tempdir) + with TemporaryDirectory(prefix="facts-upload-") as _tempdir: + local_secret_dir = Path(_tempdir).resolve() secret_facts_store.upload(local_secret_dir) remote_secret_dir = Path(machine.secrets_upload_directory) diff --git a/pkgs/clan-cli/clan_cli/flash/flash.py b/pkgs/clan-cli/clan_cli/flash/flash.py index 66d948c9a..217ecf98d 100644 --- a/pkgs/clan-cli/clan_cli/flash/flash.py +++ b/pkgs/clan-cli/clan_cli/flash/flash.py @@ -100,8 +100,8 @@ def flash_machine( secret_facts_store: SecretStoreBase = secret_facts_module.SecretStore( machine=machine ) - with TemporaryDirectory(prefix="disko-install-") as tmpdir_: - tmpdir = Path(tmpdir_) + with TemporaryDirectory(prefix="disko-install-") as _tmpdir: + tmpdir = Path(_tmpdir) upload_dir = machine.secrets_upload_directory if upload_dir.startswith("/"): diff --git a/pkgs/clan-cli/clan_cli/machines/install.py b/pkgs/clan-cli/clan_cli/machines/install.py index 04a5d30ff..3cbe07448 100644 --- a/pkgs/clan-cli/clan_cli/machines/install.py +++ b/pkgs/clan-cli/clan_cli/machines/install.py @@ -61,8 +61,9 @@ def install_machine(opts: InstallOptions) -> None: generate_facts([machine]) generate_vars([machine]) - with TemporaryDirectory(prefix="nixos-install-") as base_directory: - activation_secrets = Path(base_directory) / "activation_secrets" + with TemporaryDirectory(prefix="nixos-install-") as _base_directory: + base_directory = Path(_base_directory).resolve() + activation_secrets = base_directory / "activation_secrets" upload_dir = activation_secrets / machine.secrets_upload_directory.lstrip("/") upload_dir.mkdir(parents=True) machine.secret_facts_store.upload(upload_dir) @@ -70,7 +71,7 @@ def install_machine(opts: InstallOptions) -> None: upload_dir, phases=["activation", "users", "services"] ) - partitioning_secrets = Path(base_directory) / "partitioning_secrets" + partitioning_secrets = base_directory / "partitioning_secrets" partitioning_secrets.mkdir(parents=True) machine.secret_vars_store.populate_dir( partitioning_secrets, phases=["partitioning"] diff --git a/pkgs/clan-cli/clan_cli/machines/morph.py b/pkgs/clan-cli/clan_cli/machines/morph.py index 46981b9a3..b438516ae 100644 --- a/pkgs/clan-cli/clan_cli/machines/morph.py +++ b/pkgs/clan-cli/clan_cli/machines/morph.py @@ -56,8 +56,8 @@ def morph_machine( ).stdout.rstrip() archive_path = json.loads(archive_json)["path"] - with TemporaryDirectory(prefix="morph-") as temp_dir: - flakedir = Path(temp_dir) / "flake" + with TemporaryDirectory(prefix="morph-") as _temp_dir: + flakedir = Path(_temp_dir).resolve() / "flake" flakedir.mkdir(parents=True, exist_ok=True) run(["cp", "-r", archive_path + "/.", str(flakedir)]) diff --git a/pkgs/clan-cli/clan_cli/vars/generate.py b/pkgs/clan-cli/clan_cli/vars/generate.py index 170ab82ea..57ea6607d 100644 --- a/pkgs/clan-cli/clan_cli/vars/generate.py +++ b/pkgs/clan-cli/clan_cli/vars/generate.py @@ -181,8 +181,8 @@ def execute_generator( raise ClanError(msg) from e env = os.environ.copy() - with TemporaryDirectory(prefix="vars-") as tmp: - tmpdir = Path(tmp) + with TemporaryDirectory(prefix="vars-") as _tmpdir: + tmpdir = Path(_tmpdir).resolve() tmpdir_in = tmpdir / "in" tmpdir_prompts = tmpdir / "prompts" tmpdir_out = tmpdir / "out" diff --git a/pkgs/clan-cli/clan_cli/vars/secret_modules/password_store.py b/pkgs/clan-cli/clan_cli/vars/secret_modules/password_store.py index 57524d8c4..6d5069e47 100644 --- a/pkgs/clan-cli/clan_cli/vars/secret_modules/password_store.py +++ b/pkgs/clan-cli/clan_cli/vars/secret_modules/password_store.py @@ -231,8 +231,8 @@ class SecretStore(StoreBase): if not self.needs_upload(): log.info("Secrets already uploaded") return - with TemporaryDirectory(prefix="vars-upload-") as tempdir: - pass_dir = Path(tempdir) + with TemporaryDirectory(prefix="vars-upload-") as _tempdir: + pass_dir = Path(_tempdir).resolve() self.populate_dir(pass_dir, phases) upload_dir = Path( self.machine.deployment["password-store"]["secretLocation"] diff --git a/pkgs/clan-cli/clan_cli/vars/secret_modules/sops.py b/pkgs/clan-cli/clan_cli/vars/secret_modules/sops.py index 3ef05ce2b..bcdf147c7 100644 --- a/pkgs/clan-cli/clan_cli/vars/secret_modules/sops.py +++ b/pkgs/clan-cli/clan_cli/vars/secret_modules/sops.py @@ -224,8 +224,8 @@ class SecretStore(StoreBase): if "partitioning" in phases: msg = "Cannot upload partitioning secrets" raise NotImplementedError(msg) - with TemporaryDirectory(prefix="sops-upload-") as tempdir: - sops_upload_dir = Path(tempdir) + with TemporaryDirectory(prefix="sops-upload-") as _tempdir: + sops_upload_dir = Path(_tempdir).resolve() self.populate_dir(sops_upload_dir, phases) upload(self.machine.target_host, sops_upload_dir, Path("/var/lib/sops-nix")) diff --git a/pkgs/clan-cli/tests/fixtures_flakes.py b/pkgs/clan-cli/tests/fixtures_flakes.py index 17b32ec4a..eab0bb376 100644 --- a/pkgs/clan-cli/tests/fixtures_flakes.py +++ b/pkgs/clan-cli/tests/fixtures_flakes.py @@ -209,12 +209,13 @@ class ClanFlake: @pytest.fixture(scope="session") def minimal_flake_template() -> Iterator[ClanFlake]: with ( - tempfile.TemporaryDirectory(prefix="flake-") as home, + tempfile.TemporaryDirectory(prefix="flake-") as _home, pytest.MonkeyPatch.context() as mp, ): - mp.setenv("HOME", home) + home = Path(_home).resolve() + mp.setenv("HOME", str(home)) flake = ClanFlake( - temporary_home=Path(home), + temporary_home=home, flake_template=clan_templates(TemplateType.CLAN) / "minimal", ) flake.init_from_template() diff --git a/pkgs/clan-cli/tests/temporary_dir.py b/pkgs/clan-cli/tests/temporary_dir.py index 8713ac9f4..36ae5bc84 100644 --- a/pkgs/clan-cli/tests/temporary_dir.py +++ b/pkgs/clan-cli/tests/temporary_dir.py @@ -11,12 +11,13 @@ log = logging.getLogger(__name__) @pytest.fixture def temporary_home(monkeypatch: pytest.MonkeyPatch) -> Iterator[Path]: - with tempfile.TemporaryDirectory(prefix="pytest-home-") as dirpath: + with tempfile.TemporaryDirectory(prefix="pytest-home-") as _dirpath: + dirpath = Path(_dirpath).resolve() xdg_runtime_dir = os.getenv("XDG_RUNTIME_DIR") monkeypatch.setenv("HOME", str(dirpath)) - monkeypatch.setenv("XDG_CONFIG_HOME", str(Path(dirpath) / ".config")) + monkeypatch.setenv("XDG_CONFIG_HOME", str(dirpath / ".config")) - runtime_dir = Path(dirpath) / "xdg-runtime-dir" + runtime_dir = dirpath / "xdg-runtime-dir" runtime_dir.mkdir() runtime_dir.chmod(0o700) @@ -34,10 +35,10 @@ def temporary_home(monkeypatch: pytest.MonkeyPatch) -> Iterator[Path]: monkeypatch.setenv("XDG_RUNTIME_DIR", str(runtime_dir)) monkeypatch.chdir(str(dirpath)) - yield Path(dirpath) + yield dirpath @pytest.fixture def temp_dir() -> Iterator[Path]: - with tempfile.TemporaryDirectory(prefix="pytest-") as dirpath: - yield Path(dirpath) + with tempfile.TemporaryDirectory(prefix="pytest-") as _dirpath: + yield Path(_dirpath).resolve() diff --git a/pkgs/clan-cli/tests/test_clan_uri.py b/pkgs/clan-cli/tests/test_clan_uri.py index 703e763d6..d85b61680 100644 --- a/pkgs/clan-cli/tests/test_clan_uri.py +++ b/pkgs/clan-cli/tests/test_clan_uri.py @@ -1,5 +1,4 @@ from pathlib import Path -from tempfile import TemporaryDirectory import pytest from clan_cli.clan_uri import ClanURI @@ -36,14 +35,13 @@ def test_firefox_strip_uri() -> None: assert uri.get_url() == "git+https://git.clan.lol/clan/democlan.git" -def test_local_uri() -> None: - with TemporaryDirectory(prefix="clan_test") as tempdir: - flake_nix = Path(tempdir) / "flake.nix" - flake_nix.write_text("outputs = _: {}") +def test_local_uri(temp_dir: Path) -> None: + flake_nix = temp_dir / "flake.nix" + flake_nix.write_text("outputs = _: {}") - # Create a ClanURI object from a local URI - uri = ClanURI.from_str(f"clan://file://{tempdir}") - assert uri.flake.path == Path(tempdir) + # Create a ClanURI object from a local URI + uri = ClanURI.from_str(f"clan://file://{temp_dir}") + assert uri.flake.path == temp_dir def test_is_remote() -> None: @@ -79,25 +77,23 @@ def test_from_str_remote() -> None: assert uri.flake.identifier == "https://example.com" -def test_from_str_local() -> None: - with TemporaryDirectory(prefix="clan_test") as tempdir: - flake_nix = Path(tempdir) / "flake.nix" - flake_nix.write_text("outputs = _: {}") +def test_from_str_local(temp_dir: Path) -> None: + flake_nix = temp_dir / "flake.nix" + flake_nix.write_text("outputs = _: {}") - uri = ClanURI.from_str(url=tempdir, machine_name="myVM") - assert uri.get_url().endswith(tempdir) - assert uri.machine_name == "myVM" - assert uri.flake.is_local - assert str(uri.flake).endswith(tempdir) # type: ignore + uri = ClanURI.from_str(url=str(temp_dir), machine_name="myVM") + assert uri.get_url().endswith(str(temp_dir)) + assert uri.machine_name == "myVM" + assert uri.flake.is_local + assert str(uri.flake).endswith(str(temp_dir)) -def test_from_str_local_no_machine() -> None: - with TemporaryDirectory(prefix="clan_test") as tempdir: - flake_nix = Path(tempdir) / "flake.nix" - flake_nix.write_text("outputs = _: {}") +def test_from_str_local_no_machine(temp_dir: Path) -> None: + flake_nix = temp_dir / "flake.nix" + flake_nix.write_text("outputs = _: {}") - uri = ClanURI.from_str(tempdir) - assert uri.get_url().endswith(tempdir) - assert uri.machine_name == "defaultVM" - assert uri.flake.is_local - assert str(uri.flake).endswith(tempdir) # type: ignore + uri = ClanURI.from_str(str(temp_dir)) + assert uri.get_url().endswith(str(temp_dir)) + assert uri.machine_name == "defaultVM" + assert uri.flake.is_local + assert str(uri.flake).endswith(str(temp_dir)) From 9a00459861d1e43c985968824a2faa6dcfe8a2ff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Thalheim?= Date: Wed, 19 Mar 2025 16:32:17 +0100 Subject: [PATCH 6/7] tests/fixtures_flakes: remove unused remote flag --- pkgs/clan-cli/tests/fixtures_flakes.py | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/pkgs/clan-cli/tests/fixtures_flakes.py b/pkgs/clan-cli/tests/fixtures_flakes.py index eab0bb376..4fe8a1d24 100644 --- a/pkgs/clan-cli/tests/fixtures_flakes.py +++ b/pkgs/clan-cli/tests/fixtures_flakes.py @@ -249,7 +249,6 @@ def create_flake( machines: list[str] | None = None, # alternatively specify the machines directly including their config machine_configs: dict[str, dict] | None = None, - remote: bool = False, ) -> Iterator[FlakeForTest]: """ Creates a flake with the given name and machines. @@ -314,11 +313,7 @@ def create_flake( init_git(monkeypatch, flake) - if remote: - with tempfile.TemporaryDirectory(prefix="flake-"): - yield FlakeForTest(flake) - else: - yield FlakeForTest(flake) + yield FlakeForTest(flake) @pytest.fixture From ddb5bba48aa15661366b3ff57c3c05637d55e4e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Thalheim?= Date: Wed, 19 Mar 2025 17:04:40 +0100 Subject: [PATCH 7/7] disabe pytests on macOS for now --- pkgs/clan-cli/default.nix | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pkgs/clan-cli/default.nix b/pkgs/clan-cli/default.nix index 4d16ca556..ffe8e5087 100644 --- a/pkgs/clan-cli/default.nix +++ b/pkgs/clan-cli/default.nix @@ -127,7 +127,8 @@ pythonRuntime.pkgs.buildPythonApplication { # Define and expose the tests and checks to run in CI passthru.tests = (lib.mapAttrs' (n: lib.nameValuePair "clan-dep-${n}") testRuntimeDependenciesMap) - // { + // lib.optionalAttrs (!stdenv.isDarwin) { + # disabled on macOS until we fix all remaining issues clan-pytest-without-core = runCommand "clan-pytest-without-core" {