From fff6ad6bffea7ee0211b1e13d33c06fccbfd2ea9 Mon Sep 17 00:00:00 2001 From: Ryan Yin Date: Wed, 13 Mar 2024 14:47:36 +0800 Subject: [PATCH] feat: unit tests --- .github/workflows/flake_check.yml | 24 ------------------- .github/workflows/flake_unittests.yml | 24 +++++++++++++++++++ outputs/README.md | 10 ++++++-- outputs/aarch64-darwin/default.nix | 9 ------- outputs/aarch64-linux/default.nix | 8 +++---- .../aarch64-linux/tests/hostname/expected.nix | 8 +++++++ outputs/aarch64-linux/tests/hostname/expr.nix | 9 +++++++ outputs/default.nix | 6 ++--- outputs/riscv64-linux/default.nix | 8 +++---- .../riscv64-linux/tests/hostname/expected.nix | 8 +++++++ outputs/riscv64-linux/tests/hostname/expr.nix | 9 +++++++ outputs/x86_64-darwin/default.nix | 9 ------- outputs/x86_64-linux/default.nix | 8 +++---- .../tests/home-manager/expected.nix | 15 ++++++++++++ .../x86_64-linux/tests/home-manager/expr.nix | 20 ++++++++++++++++ .../x86_64-linux/tests/hostname/expected.nix | 17 +++++++++++++ outputs/x86_64-linux/tests/hostname/expr.nix | 9 +++++++ 17 files changed, 142 insertions(+), 59 deletions(-) delete mode 100644 .github/workflows/flake_check.yml create mode 100644 .github/workflows/flake_unittests.yml create mode 100644 outputs/aarch64-linux/tests/hostname/expected.nix create mode 100644 outputs/aarch64-linux/tests/hostname/expr.nix create mode 100644 outputs/riscv64-linux/tests/hostname/expected.nix create mode 100644 outputs/riscv64-linux/tests/hostname/expr.nix create mode 100644 outputs/x86_64-linux/tests/home-manager/expected.nix create mode 100644 outputs/x86_64-linux/tests/home-manager/expr.nix create mode 100644 outputs/x86_64-linux/tests/hostname/expected.nix create mode 100644 outputs/x86_64-linux/tests/hostname/expr.nix diff --git a/.github/workflows/flake_check.yml b/.github/workflows/flake_check.yml deleted file mode 100644 index fb9c6369..00000000 --- a/.github/workflows/flake_check.yml +++ /dev/null @@ -1,24 +0,0 @@ -name: Nix Flake Check - -on: [push, pull_request, workflow_dispatch] - -jobs: - checks: - name: Check expressions - runs-on: ubuntu-latest - - steps: - # - name: Checkout repository - # uses: actions/checkout@v4 - # - name: Install nix - # uses: cachix/install-nix-action@v24 - # with: - # install_url: https://nixos.org/nix/install - # extra_nix_config: | - # access-tokens = github.com=${{ secrets.GITHUB_TOKEN }} - # experimental-features = nix-command flakes - - - name: Run Nix Flake Check - run: | - echo 'TODO: nix flake check' - # nix flake check diff --git a/.github/workflows/flake_unittests.yml b/.github/workflows/flake_unittests.yml new file mode 100644 index 00000000..92e36db6 --- /dev/null +++ b/.github/workflows/flake_unittests.yml @@ -0,0 +1,24 @@ +name: Nix Flake Unit Tests + +on: [push, pull_request, workflow_dispatch] + +jobs: + checks: + name: Check expressions + runs-on: ubuntu-latest + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + - name: Install nix + uses: cachix/install-nix-action@v24 + with: + install_url: https://nixos.org/nix/install + extra_nix_config: | + access-tokens = github.com=${{ secrets.GITHUB_TOKEN }} + experimental-features = nix-command flakes + + - name: Run Nix Flake Unit Tests + run: | + echo 'Flake Unit Tests' + nix eval .#unitTests --show-trace --print-build-logs --verbose diff --git a/outputs/README.md b/outputs/README.md index fbfca9b1..a989d2a1 100644 --- a/outputs/README.md +++ b/outputs/README.md @@ -7,6 +7,14 @@ There is no need to do this when you have a small number of machines. But when you have a large number of machines, it is necessary to manage them in a fine-grained way, otherwise, it will be difficult to manage and maintain them. +## Unit Tests + +Unit Tests for all flake outputs(only NixOS systems currently). + +```bash +nix eval .#unitTests --show-trace --print-build-logs --verbose +``` + ## Overview All the outputs of this flake are defined here. @@ -56,5 +64,3 @@ All the outputs of this flake are defined here. 12 directories, 28 files ``` - - diff --git a/outputs/aarch64-darwin/default.nix b/outputs/aarch64-darwin/default.nix index 6b0066f9..7ff7b8ea 100644 --- a/outputs/aarch64-darwin/default.nix +++ b/outputs/aarch64-darwin/default.nix @@ -19,12 +19,3 @@ }; in outputs - // { - inherit data; # for debugging purposes - - # NixOS's unit tests. - # unit-tests = haumea.lib.loadEvalTests { - # src = ./tests; - # inputs = args; - # }; - } diff --git a/outputs/aarch64-linux/default.nix b/outputs/aarch64-linux/default.nix index 14cd0947..9288d828 100644 --- a/outputs/aarch64-linux/default.nix +++ b/outputs/aarch64-linux/default.nix @@ -31,8 +31,8 @@ in inherit data; # for debugging purposes # NixOS's unit tests. - # unit-tests = haumea.lib.loadEvalTests { - # src = ./tests; - # inputs = args; - # }; + unitTests = haumea.lib.loadEvalTests { + src = ./tests; + inputs = args // {inherit outputs;}; + }; } diff --git a/outputs/aarch64-linux/tests/hostname/expected.nix b/outputs/aarch64-linux/tests/hostname/expected.nix new file mode 100644 index 00000000..0ab7728b --- /dev/null +++ b/outputs/aarch64-linux/tests/hostname/expected.nix @@ -0,0 +1,8 @@ +{ + lib, + outputs, +}: let + hostsNames = builtins.attrNames outputs.nixosConfigurations; + expected = lib.genAttrs hostsNames (name: name); +in + expected diff --git a/outputs/aarch64-linux/tests/hostname/expr.nix b/outputs/aarch64-linux/tests/hostname/expr.nix new file mode 100644 index 00000000..6f6c291a --- /dev/null +++ b/outputs/aarch64-linux/tests/hostname/expr.nix @@ -0,0 +1,9 @@ +{ + lib, + outputs, +}: +lib.genAttrs +(builtins.attrNames outputs.nixosConfigurations) +( + name: outputs.nixosConfigurations.${name}.config.networking.hostName +) diff --git a/outputs/default.nix b/outputs/default.nix index e925efaa..89e1f5ad 100644 --- a/outputs/default.nix +++ b/outputs/default.nix @@ -52,6 +52,9 @@ in { # add attribute sets into outputs, for debugging debugAttrs = {inherit nixosSystems darwinSystems allSystems allSystemNames;}; + # Unit Tests for all NixOS systems. + unitTests = lib.lists.all (it: it.unitTests == {}) nixosSystemValues; + # NixOS Hosts nixosConfigurations = lib.attrsets.mergeAttrsList (map (it: it.nixosConfigurations or {}) nixosSystemValues); @@ -89,9 +92,6 @@ in { # Unit Tests, Intergraded Tests, and Pre-commit checks checks = forAllSystems ( system: { - # Unit Tests for the system - # unit-tests = allSystems.${system}.unit-tests; - pre-commit-check = pre-commit-hooks.lib.${system}.run { src = ./.; hooks = { diff --git a/outputs/riscv64-linux/default.nix b/outputs/riscv64-linux/default.nix index 14cd0947..9288d828 100644 --- a/outputs/riscv64-linux/default.nix +++ b/outputs/riscv64-linux/default.nix @@ -31,8 +31,8 @@ in inherit data; # for debugging purposes # NixOS's unit tests. - # unit-tests = haumea.lib.loadEvalTests { - # src = ./tests; - # inputs = args; - # }; + unitTests = haumea.lib.loadEvalTests { + src = ./tests; + inputs = args // {inherit outputs;}; + }; } diff --git a/outputs/riscv64-linux/tests/hostname/expected.nix b/outputs/riscv64-linux/tests/hostname/expected.nix new file mode 100644 index 00000000..0ab7728b --- /dev/null +++ b/outputs/riscv64-linux/tests/hostname/expected.nix @@ -0,0 +1,8 @@ +{ + lib, + outputs, +}: let + hostsNames = builtins.attrNames outputs.nixosConfigurations; + expected = lib.genAttrs hostsNames (name: name); +in + expected diff --git a/outputs/riscv64-linux/tests/hostname/expr.nix b/outputs/riscv64-linux/tests/hostname/expr.nix new file mode 100644 index 00000000..6f6c291a --- /dev/null +++ b/outputs/riscv64-linux/tests/hostname/expr.nix @@ -0,0 +1,9 @@ +{ + lib, + outputs, +}: +lib.genAttrs +(builtins.attrNames outputs.nixosConfigurations) +( + name: outputs.nixosConfigurations.${name}.config.networking.hostName +) diff --git a/outputs/x86_64-darwin/default.nix b/outputs/x86_64-darwin/default.nix index 6b0066f9..7ff7b8ea 100644 --- a/outputs/x86_64-darwin/default.nix +++ b/outputs/x86_64-darwin/default.nix @@ -19,12 +19,3 @@ }; in outputs - // { - inherit data; # for debugging purposes - - # NixOS's unit tests. - # unit-tests = haumea.lib.loadEvalTests { - # src = ./tests; - # inputs = args; - # }; - } diff --git a/outputs/x86_64-linux/default.nix b/outputs/x86_64-linux/default.nix index 4f5d9b7a..04cab8b6 100644 --- a/outputs/x86_64-linux/default.nix +++ b/outputs/x86_64-linux/default.nix @@ -30,8 +30,8 @@ in inherit data; # for debugging purposes # NixOS's unit tests. - # unit-tests = haumea.lib.loadEvalTests { - # src = ./tests; - # inputs = args; - # }; + unitTests = haumea.lib.loadEvalTests { + src = ./tests; + inputs = args // {inherit outputs;}; + }; } diff --git a/outputs/x86_64-linux/tests/home-manager/expected.nix b/outputs/x86_64-linux/tests/home-manager/expected.nix new file mode 100644 index 00000000..b4b2260c --- /dev/null +++ b/outputs/x86_64-linux/tests/home-manager/expected.nix @@ -0,0 +1,15 @@ +{ + myvars, + lib, +}: let + username = myvars.username; + hosts = [ + "ai-hyprland" + "ai-i3" + "shoukei-hyprland" + "shoukei-i3" + "ruby" + "k3s-prod-1-master-1" + ]; +in + lib.genAttrs hosts (_: "/home/${username}") diff --git a/outputs/x86_64-linux/tests/home-manager/expr.nix b/outputs/x86_64-linux/tests/home-manager/expr.nix new file mode 100644 index 00000000..20ea18aa --- /dev/null +++ b/outputs/x86_64-linux/tests/home-manager/expr.nix @@ -0,0 +1,20 @@ +{ + myvars, + lib, + outputs, +}: let + username = myvars.username; + hosts = [ + "ai-hyprland" + "ai-i3" + "shoukei-hyprland" + "shoukei-i3" + "ruby" + "k3s-prod-1-master-1" + ]; +in + lib.genAttrs + hosts + ( + name: outputs.nixosConfigurations.${name}.config.home-manager.users.${username}.home.homeDirectory + ) diff --git a/outputs/x86_64-linux/tests/hostname/expected.nix b/outputs/x86_64-linux/tests/hostname/expected.nix new file mode 100644 index 00000000..d5abc3f7 --- /dev/null +++ b/outputs/x86_64-linux/tests/hostname/expected.nix @@ -0,0 +1,17 @@ +{ + lib, + outputs, +}: let + specialExpected = { + "ai-hyprland" = "ai"; + "ai-i3" = "ai"; + "shoukei-hyprland" = "shoukei"; + "shoukei-i3" = "shoukei"; + }; + specialHostNames = builtins.attrNames specialExpected; + + otherHosts = builtins.removeAttrs outputs.nixosConfigurations specialHostNames; + otherHostsNames = builtins.attrNames otherHosts; + # other hosts's hostName is the same as the nixosConfigurations name + otherExpected = lib.genAttrs otherHostsNames (name: name); +in (specialExpected // otherExpected) diff --git a/outputs/x86_64-linux/tests/hostname/expr.nix b/outputs/x86_64-linux/tests/hostname/expr.nix new file mode 100644 index 00000000..6f6c291a --- /dev/null +++ b/outputs/x86_64-linux/tests/hostname/expr.nix @@ -0,0 +1,9 @@ +{ + lib, + outputs, +}: +lib.genAttrs +(builtins.attrNames outputs.nixosConfigurations) +( + name: outputs.nixosConfigurations.${name}.config.networking.hostName +)