diff options
author | Robert Hensing <roberth@users.noreply.github.com> | 2024-01-19 12:29:04 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-01-19 12:29:04 +0100 |
commit | e0000983db23a86e03f1d6c467beef8532c3909d (patch) | |
tree | ea7dd7b327b033ac5d61591841135fb3cf797e3c /pkgs/os-specific | |
parent | f0e5bbdc5d87e4da2770180fda1bf60e33c9b2e3 (diff) | |
parent | d059ce52ceb58edf61dfd55aaa4cab0546aac916 (diff) | |
download | nixlib-e0000983db23a86e03f1d6c467beef8532c3909d.tar nixlib-e0000983db23a86e03f1d6c467beef8532c3909d.tar.gz nixlib-e0000983db23a86e03f1d6c467beef8532c3909d.tar.bz2 nixlib-e0000983db23a86e03f1d6c467beef8532c3909d.tar.lz nixlib-e0000983db23a86e03f1d6c467beef8532c3909d.tar.xz nixlib-e0000983db23a86e03f1d6c467beef8532c3909d.tar.zst nixlib-e0000983db23a86e03f1d6c467beef8532c3909d.zip |
Merge pull request #279170 from SuperSandro2000/nixos-repl-lib
nixos-rebuild: add lib to repl to make debugging even easier
Diffstat (limited to 'pkgs/os-specific')
-rw-r--r-- | pkgs/os-specific/linux/nixos-rebuild/default.nix | 4 | ||||
-rwxr-xr-x | pkgs/os-specific/linux/nixos-rebuild/nixos-rebuild.sh | 2 | ||||
-rw-r--r-- | pkgs/os-specific/linux/nixos-rebuild/test/repl.nix | 146 |
3 files changed, 151 insertions, 1 deletions
diff --git a/pkgs/os-specific/linux/nixos-rebuild/default.nix b/pkgs/os-specific/linux/nixos-rebuild/default.nix index 9a7cca68bfd7..4849ff75c54a 100644 --- a/pkgs/os-specific/linux/nixos-rebuild/default.nix +++ b/pkgs/os-specific/linux/nixos-rebuild/default.nix @@ -1,4 +1,5 @@ -{ substituteAll +{ callPackage +, substituteAll , runtimeShell , coreutils , gnused @@ -36,6 +37,7 @@ substituteAll { # run some a simple installer tests to make sure nixos-rebuild still works for them passthru.tests = { install-bootloader = nixosTests.nixos-rebuild-install-bootloader; + repl = callPackage ./test/repl.nix {}; simple-installer = nixosTests.installer.simple; specialisations = nixosTests.nixos-rebuild-specialisations; target-host = nixosTests.nixos-rebuild-target-host; diff --git a/pkgs/os-specific/linux/nixos-rebuild/nixos-rebuild.sh b/pkgs/os-specific/linux/nixos-rebuild/nixos-rebuild.sh index 006b5db6320c..bde6ff9d959b 100755 --- a/pkgs/os-specific/linux/nixos-rebuild/nixos-rebuild.sh +++ b/pkgs/os-specific/linux/nixos-rebuild/nixos-rebuild.sh @@ -572,6 +572,7 @@ if [ "$action" = repl ]; then - ${blue}config${reset} All option values - ${blue}options${reset} Option data and metadata - ${blue}pkgs${reset} Nixpkgs package set + - ${blue}lib${reset} Nixpkgs library functions - other module arguments - ${blue}flake${reset} Flake outputs, inputs and source info of $flake @@ -592,6 +593,7 @@ if [ "$action" = repl ]; then configuration._module.specialArgs // { inherit (configuration) config options; + lib = configuration.lib or configuration.pkgs.lib; inherit flake; }; in builtins.seq scope builtins.trace motd scope diff --git a/pkgs/os-specific/linux/nixos-rebuild/test/repl.nix b/pkgs/os-specific/linux/nixos-rebuild/test/repl.nix new file mode 100644 index 000000000000..1161ff84664d --- /dev/null +++ b/pkgs/os-specific/linux/nixos-rebuild/test/repl.nix @@ -0,0 +1,146 @@ +{ lib, + expect, + nix, + nixos-rebuild, + path, + runCommand, + stdenv, + writeText, +}: +let + # Arguably not true, but it holds up for now. + escapeExpect = lib.strings.escapeNixString; + + expectSetup = '' + set timeout 180 + proc expect_simple { pattern } { + puts "Expecting: $pattern" + expect { + timeout { + puts "\nTimeout waiting for: $pattern\n" + exit 1 + } + $pattern + } + } + ''; + + # In case we want/need to evaluate packages or the assertions or whatever, + # we want to have a linux system. + # TODO: make the non-flake test use thise. + linuxSystem = lib.replaceStrings ["darwin"] ["linux"] stdenv.hostPlatform.system; + +in +runCommand "test-nixos-rebuild-repl" { + nativeBuildInputs = [ + expect + nix + nixos-rebuild + ]; + nixpkgs = + if builtins.pathExists (path + "/.git") + then lib.cleanSource path + else path; +} '' + export HOME=$(mktemp -d) + export TEST_ROOT=$PWD/test-tmp + + # Prepare for running Nix in sandbox + export NIX_BUILD_HOOK= + export NIX_CONF_DIR=$TEST_ROOT/etc + export NIX_LOCALSTATE_DIR=$TEST_ROOT/var + export NIX_LOG_DIR=$TEST_ROOT/var/log/nix + export NIX_STATE_DIR=$TEST_ROOT/var/nix + export NIX_STORE_DIR=$TEST_ROOT/store + export PAGER=cat + mkdir -p $TEST_ROOT $NIX_CONF_DIR + + echo General setup + ################## + + export NIX_PATH=nixpkgs=$nixpkgs:nixos-config=$HOME/configuration.nix + cat >> ~/configuration.nix <<EOF + { + boot.loader.grub.enable = false; + fileSystems."/".device = "x"; + imports = [ ./hardware-configuration.nix ]; + } + EOF + + echo '{ }' > ~/hardware-configuration.nix + + + echo Test traditional NixOS configuration + ######################################### + + expect ${writeText "test-nixos-rebuild-repl-expect" '' + ${expectSetup} + spawn nixos-rebuild repl --fast + + expect "nix-repl> " + + send "config.networking.hostName\n" + expect "\"nixos\"" + ''} + + + echo Test flake based NixOS configuration + ######################################### + + # Switch to flake flavored environment + unset NIX_PATH + cat > $NIX_CONF_DIR/nix.conf <<EOF + experimental-features = nix-command flakes + EOF + + # Make the config pure + echo '{ nixpkgs.hostPlatform = "${linuxSystem}"; }' > ~/hardware-configuration.nix + + cat >~/flake.nix <<EOF + { + inputs.nixpkgs.url = "path:$nixpkgs"; + outputs = { nixpkgs, ... }: { + nixosConfigurations.testconf = nixpkgs.lib.nixosSystem { + modules = [ + ./configuration.nix + # Let's change it up a bit + { networking.hostName = "itsme"; } + ]; + }; + }; + } + EOF + + # cat -n ~/flake.nix + + expect ${writeText "test-nixos-rebuild-repl-expect" '' + ${expectSetup} + spawn sh -c "nixos-rebuild repl --fast --flake path:\$HOME#testconf" + + expect_simple "nix-repl>" + + send "config.networking.hostName\n" + expect_simple "itsme" + + expect_simple "nix-repl>" + send "lib.version\n" + expect_simple ${escapeExpect ( + # The version string is a bit different in the flake lib, so we expect a prefix and ignore the rest + # Furthermore, including the revision (suffix) would cause unnecessary rebuilds. + # Note that a length of 4 only matches e.g. "24. + lib.strings.substring 0 4 (lib.strings.escapeNixString lib.version))} + + # Make sure it's the right lib - should be the flake lib, not Nixpkgs lib. + expect_simple "nix-repl>" + send "lib?nixosSystem\n" + expect_simple "true" + expect_simple "nix-repl>" + send "lib?nixos\n" + expect_simple "true" + ''} + echo + + ######### + echo Done + touch $out +'' |