this derivation will be built: /nix/store/hajkx8nhsgf22hrhq87xn71x67hm4b7d-treefmt-check.drv building '/nix/store/hajkx8nhsgf22hrhq87xn71x67hm4b7d-treefmt-check.drv' on 'ssh-ng://builder@build04.clan.lol' building '/nix/store/hajkx8nhsgf22hrhq87xn71x67hm4b7d-treefmt-check.drv' treefmt-check> treefmt v2.4.1traversed 87 files treefmt-check> emitted 63 files for processing treefmt-check> formatted 63 files (3 changed) in 197ms treefmt-check> M lib/zfs-storage/tests/eval-tests.nix treefmt-check> M lib/zfs-storage/tests/flake-module.nix treefmt-check> M lib/zfs-storage/tests/vm-runtime/service.nix treefmt-check> diff --git a/lib/zfs-storage/tests/eval-tests.nix b/lib/zfs-storage/tests/eval-tests.nix treefmt-check> index 2333693..88de88a 100644 treefmt-check> --- a/lib/zfs-storage/tests/eval-tests.nix treefmt-check> +++ b/lib/zfs-storage/tests/eval-tests.nix treefmt-check> @@ -16,23 +16,25 @@ let treefmt-check> # Used to evaluate raw inputs *through* the submodule types so that treefmt-check> # defaults surface (owner, zfs, mode) exactly as a real consumer sees treefmt-check> # them. treefmt-check> - mountsType = lib.types.attrsOf (lib.types.submodule { treefmt-check> - options = { treefmt-check> - path = lib.mkOption { type = lib.types.str; }; treefmt-check> - mode = lib.mkOption { treefmt-check> - type = lib.types.str; treefmt-check> - default = "0750"; treefmt-check> - }; treefmt-check> - owner = lib.mkOption { treefmt-check> - type = zfsStorage.types.owner; treefmt-check> - default = { }; treefmt-check> - }; treefmt-check> - zfs = lib.mkOption { treefmt-check> - type = zfsStorage.types.zfs; treefmt-check> - default = { }; treefmt-check> + mountsType = lib.types.attrsOf ( treefmt-check> + lib.types.submodule { treefmt-check> + options = { treefmt-check> + path = lib.mkOption { type = lib.types.str; }; treefmt-check> + mode = lib.mkOption { treefmt-check> + type = lib.types.str; treefmt-check> + default = "0750"; treefmt-check> + }; treefmt-check> + owner = lib.mkOption { treefmt-check> + type = zfsStorage.types.owner; treefmt-check> + default = { }; treefmt-check> + }; treefmt-check> + zfs = lib.mkOption { treefmt-check> + type = zfsStorage.types.zfs; treefmt-check> + default = { }; treefmt-check> + }; treefmt-check> }; treefmt-check> - }; treefmt-check> - }); treefmt-check> + } treefmt-check> + ); treefmt-check> treefmt-check> evalMounts = treefmt-check> raw: treefmt-check> @@ -50,7 +52,9 @@ let treefmt-check> treefmt-check> # A single fully-defaulted mount, used by the defaults tests. treefmt-check> defaultedMounts = evalMounts { treefmt-check> - m = { path = "/x"; }; treefmt-check> + m = { treefmt-check> + path = "/x"; treefmt-check> + }; treefmt-check> }; treefmt-check> in treefmt-check> { treefmt-check> @@ -166,7 +170,9 @@ in treefmt-check> }; treefmt-check> }; treefmt-check> # zfs.enable defaults to false → this entry must be dropped. treefmt-check> - drop = { path = "/srv/b"; }; treefmt-check> + drop = { treefmt-check> + path = "/srv/b"; treefmt-check> + }; treefmt-check> }); treefmt-check> expected = { treefmt-check> "srv-a" = { treefmt-check> @@ -188,32 +194,38 @@ in treefmt-check> # ── mkDiskoDatasets key convention ──────────────────────────────── treefmt-check> treefmt-check> testMkDiskoKey = { treefmt-check> - expr = builtins.attrNames (zfsStorage.mkDiskoDatasets (evalMounts { treefmt-check> - m = { treefmt-check> - path = "/srv/a"; treefmt-check> - zfs = { treefmt-check> - enable = true; treefmt-check> - pool = "pool1"; treefmt-check> - dataset = "data/a"; treefmt-check> + expr = builtins.attrNames ( treefmt-check> + zfsStorage.mkDiskoDatasets (evalMounts { treefmt-check> + m = { treefmt-check> + path = "/srv/a"; treefmt-check> + zfs = { treefmt-check> + enable = true; treefmt-check> + pool = "pool1"; treefmt-check> + dataset = "data/a"; treefmt-check> + }; treefmt-check> }; treefmt-check> - }; treefmt-check> - })); treefmt-check> + }) treefmt-check> + ); treefmt-check> expected = [ "pool1/data/a" ]; treefmt-check> }; treefmt-check> treefmt-check> # Disabled mount does not leak into mkDiskoDatasets output. treefmt-check> testMkDiskoFiltersDisabled = { treefmt-check> - expr = builtins.attrNames (zfsStorage.mkDiskoDatasets (evalMounts { treefmt-check> - keep = { treefmt-check> - path = "/srv/a"; treefmt-check> - zfs = { treefmt-check> - enable = true; treefmt-check> - pool = "p"; treefmt-check> - dataset = "a"; treefmt-check> + expr = builtins.attrNames ( treefmt-check> + zfsStorage.mkDiskoDatasets (evalMounts { treefmt-check> + keep = { treefmt-check> + path = "/srv/a"; treefmt-check> + zfs = { treefmt-check> + enable = true; treefmt-check> + pool = "p"; treefmt-check> + dataset = "a"; treefmt-check> + }; treefmt-check> }; treefmt-check> - }; treefmt-check> - drop = { path = "/srv/b"; }; treefmt-check> - })); treefmt-check> + drop = { treefmt-check> + path = "/srv/b"; treefmt-check> + }; treefmt-check> + }) treefmt-check> + ); treefmt-check> expected = [ "p/a" ]; treefmt-check> }; treefmt-check> treefmt-check> @@ -324,7 +336,9 @@ in treefmt-check> dataset = "a"; treefmt-check> }; treefmt-check> }; treefmt-check> - drop = { path = "/srv/b"; }; treefmt-check> + drop = { treefmt-check> + path = "/srv/b"; treefmt-check> + }; treefmt-check> }); treefmt-check> expected = [ "d /srv/a 0750 app app -" ]; treefmt-check> }; treefmt-check> @@ -345,7 +359,9 @@ in treefmt-check> dataset = "a"; treefmt-check> }; treefmt-check> }; treefmt-check> - off = { path = "/var/cache/app"; }; treefmt-check> + off = { treefmt-check> + path = "/var/cache/app"; treefmt-check> + }; treefmt-check> }); treefmt-check> in treefmt-check> builtins.sort (a: b: a.label < b.label) out; treefmt-check> diff --git a/lib/zfs-storage/tests/flake-module.nix b/lib/zfs-storage/tests/flake-module.nix treefmt-check> index 0130c40..3ef9e55 100644 treefmt-check> --- a/lib/zfs-storage/tests/flake-module.nix treefmt-check> +++ b/lib/zfs-storage/tests/flake-module.nix treefmt-check> @@ -34,50 +34,49 @@ in treefmt-check> nix-unit.tests.zfs-storage = import ./eval-tests.nix { inherit (pkgs) lib; }; treefmt-check> treefmt-check> # `nix flake check` coverage. treefmt-check> - checks = treefmt-check> - { treefmt-check> - # Eval tests: force every assertion at Nix eval time. Mirrors the treefmt-check> - # `eval-tests-import-flake` pattern in `tests/flake-module.nix`. treefmt-check> - eval-tests-zfs-storage = treefmt-check> - let treefmt-check> - tests = import ./eval-tests.nix { inherit (pkgs) lib; }; treefmt-check> - results = lib.mapAttrs ( treefmt-check> - name: test: treefmt-check> - let treefmt-check> - pass = test.expr == test.expected; treefmt-check> - in treefmt-check> - if pass then treefmt-check> - "pass" treefmt-check> - else treefmt-check> - throw "eval test '${name}' failed:\n expr: ${builtins.toJSON test.expr}\n expected: ${builtins.toJSON test.expected}" treefmt-check> - ) tests; treefmt-check> - summary = lib.concatStringsSep "\n" ( treefmt-check> - lib.mapAttrsToList (name: status: " ${name}: ${status}") results treefmt-check> - ); treefmt-check> - in treefmt-check> - pkgs.runCommand "eval-tests-zfs-storage" { inherit summary; } '' treefmt-check> - echo "All zfs-storage eval tests passed:" treefmt-check> - echo "$summary" treefmt-check> - echo "" treefmt-check> - echo "${toString (builtins.length (builtins.attrNames tests))} tests passed." treefmt-check> - touch $out treefmt-check> - ''; treefmt-check> - } treefmt-check> - # Test 2: build-only structural check that `mkDiskoDatasets` output treefmt-check> - # is a shape disko-zfs accepts. Forces `system.build.diskoScript` to treefmt-check> - # build; does NOT execute it. Linux-only because disko-zfs is Linux. treefmt-check> - // lib.optionalAttrs pkgs.stdenv.isLinux { treefmt-check> - zfs-storage-disko-build = treefmt-check> - let treefmt-check> - machine = inputs.nixpkgs.lib.nixosSystem { treefmt-check> - inherit system; treefmt-check> - modules = [ (import ./disko-build/machine.nix { inherit inputs; }) ]; treefmt-check> - }; treefmt-check> - in treefmt-check> - pkgs.runCommand "zfs-storage-disko-build" { } '' treefmt-check> - cp ${machine.config.system.build.diskoScript} $out treefmt-check> - ''; treefmt-check> - }; treefmt-check> + checks = { treefmt-check> + # Eval tests: force every assertion at Nix eval time. Mirrors the treefmt-check> + # `eval-tests-import-flake` pattern in `tests/flake-module.nix`. treefmt-check> + eval-tests-zfs-storage = treefmt-check> + let treefmt-check> + tests = import ./eval-tests.nix { inherit (pkgs) lib; }; treefmt-check> + results = lib.mapAttrs ( treefmt-check> + name: test: treefmt-check> + let treefmt-check> + pass = test.expr == test.expected; treefmt-check> + in treefmt-check> + if pass then treefmt-check> + "pass" treefmt-check> + else treefmt-check> + throw "eval test '${name}' failed:\n expr: ${builtins.toJSON test.expr}\n expected: ${builtins.toJSON test.expected}" treefmt-check> + ) tests; treefmt-check> + summary = lib.concatStringsSep "\n" ( treefmt-check> + lib.mapAttrsToList (name: status: " ${name}: ${status}") results treefmt-check> + ); treefmt-check> + in treefmt-check> + pkgs.runCommand "eval-tests-zfs-storage" { inherit summary; } '' treefmt-check> + echo "All zfs-storage eval tests passed:" treefmt-check> + echo "$summary" treefmt-check> + echo "" treefmt-check> + echo "${toString (builtins.length (builtins.attrNames tests))} tests passed." treefmt-check> + touch $out treefmt-check> + ''; treefmt-check> + } treefmt-check> + # Test 2: build-only structural check that `mkDiskoDatasets` output treefmt-check> + # is a shape disko-zfs accepts. Forces `system.build.diskoScript` to treefmt-check> + # build; does NOT execute it. Linux-only because disko-zfs is Linux. treefmt-check> + // lib.optionalAttrs pkgs.stdenv.isLinux { treefmt-check> + zfs-storage-disko-build = treefmt-check> + let treefmt-check> + machine = inputs.nixpkgs.lib.nixosSystem { treefmt-check> + inherit system; treefmt-check> + modules = [ (import ./disko-build/machine.nix { inherit inputs; }) ]; treefmt-check> + }; treefmt-check> + in treefmt-check> + pkgs.runCommand "zfs-storage-disko-build" { } '' treefmt-check> + cp ${machine.config.system.build.diskoScript} $out treefmt-check> + ''; treefmt-check> + }; treefmt-check> treefmt-check> # Test 1: VM, runtime side, no disko. Linux-only via the treefmt-check> # `optionalAttrs pkgs.stdenv.isLinux` gate inside `clan-nixos-test.nix`. treefmt-check> diff --git a/lib/zfs-storage/tests/vm-runtime/service.nix b/lib/zfs-storage/tests/vm-runtime/service.nix treefmt-check> index 2e0050b..b92399c 100644 treefmt-check> --- a/lib/zfs-storage/tests/vm-runtime/service.nix treefmt-check> +++ b/lib/zfs-storage/tests/vm-runtime/service.nix treefmt-check> @@ -23,23 +23,25 @@ treefmt-check> { treefmt-check> options.mounts = lib.mkOption { treefmt-check> default = { }; treefmt-check> - type = lib.types.attrsOf (lib.types.submodule { treefmt-check> - options = { treefmt-check> - path = lib.mkOption { type = lib.types.str; }; treefmt-check> - mode = lib.mkOption { treefmt-check> - type = lib.types.str; treefmt-check> - default = "0750"; treefmt-check> + type = lib.types.attrsOf ( treefmt-check> + lib.types.submodule { treefmt-check> + options = { treefmt-check> + path = lib.mkOption { type = lib.types.str; }; treefmt-check> + mode = lib.mkOption { treefmt-check> + type = lib.types.str; treefmt-check> + default = "0750"; treefmt-check> + }; treefmt-check> + owner = lib.mkOption { treefmt-check> + type = zfsStorage.types.owner; treefmt-check> + default = { }; treefmt-check> + }; treefmt-check> + zfs = lib.mkOption { treefmt-check> + type = zfsStorage.types.zfs; treefmt-check> + default = { }; treefmt-check> + }; treefmt-check> }; treefmt-check> - owner = lib.mkOption { treefmt-check> - type = zfsStorage.types.owner; treefmt-check> - default = { }; treefmt-check> - }; treefmt-check> - zfs = lib.mkOption { treefmt-check> - type = zfsStorage.types.zfs; treefmt-check> - default = { }; treefmt-check> - }; treefmt-check> - }; treefmt-check> - }); treefmt-check> + } treefmt-check> + ); treefmt-check> }; treefmt-check> }; treefmt-check> error: path '/nix/store/s7yd7ia641grkzm02fnwzrrf5kifik8w-treefmt-check' is not valid error: Cannot build '/nix/store/hajkx8nhsgf22hrhq87xn71x67hm4b7d-treefmt-check.drv'. Reason: builder failed with exit code 1. Output paths: /nix/store/s7yd7ia641grkzm02fnwzrrf5kifik8w-treefmt-check