Unverified Commit e2ac17f7 authored by Ryan Lahfa's avatar Ryan Lahfa Committed by GitHub
Browse files

Merge pull request #207466 from Patryk27/fix/174065

nixos: add --specialisation to nixos-rebuild
parents 4ae2ca2e 2c55eba8
Loading
Loading
Loading
Loading
+9 −1
Original line number Diff line number Diff line
@@ -10,7 +10,7 @@
      In addition to numerous new and upgraded packages, this release
      has the following highlights:
    </para>
    <itemizedlist spacing="compact">
    <itemizedlist>
      <listitem>
        <para>
          Cinnamon has been updated to 5.6, see
@@ -18,6 +18,14 @@
          pull request</link> for what is changed.
        </para>
      </listitem>
      <listitem>
        <para>
          <literal>nixos-rebuild</literal> now supports an extra
          <literal>--specialisation</literal> option that can be used to
          change specialisation for <literal>switch</literal> and
          <literal>test</literal> commands.
        </para>
      </listitem>
    </itemizedlist>
  </section>
  <section xml:id="sec-release-23.05-new-services">
+51 −0
Original line number Diff line number Diff line
@@ -113,6 +113,18 @@
     </group> <replaceable>name</replaceable>
   </arg>

   <arg>
    <group choice='req'>
    <arg choice='plain'>
     <option>--specialisation</option>
    </arg>

    <arg choice='plain'>
     <option>-c</option>
    </arg>
     </group> <replaceable>name</replaceable>
   </arg>

   <sbr />

   <arg>
@@ -204,6 +216,20 @@
       <command>nixos-rebuild switch</command> or <command>nixos-rebuild
       boot</command> remain available in the GRUB menu.
      </para>
      <para>
        Note that if you are using specializations, running just
        <command>nixos-rebuild switch</command> will switch you back to the
        unspecialized, base system - in that case, you might want to use this
        instead:
<screen>
<prompt>$ </prompt>nixos-rebuild switch --specialisation your-specialisation-name
</screen>
        This command will build all specialisations and make them bootable just
        like regular <command>nixos-rebuild switch</command> does - the only
        thing different is that it will switch to given specialisation instead
        of the base system; it can be also used to switch from the base system
        into a specialised one, or to switch between specialisations.
      </para>
     </listitem>
    </varlistentry>

@@ -233,6 +259,16 @@
       configuration resulting from the last call to <command>nixos-rebuild
       switch</command> or <command>nixos-rebuild boot</command>).
      </para>
      <para>
        Note that if you are using specialisations, running just
        <command>nixos-rebuild test</command> will activate the unspecialised,
        base system - in that case, you might want to use this instead:
<screen>
<prompt>$ </prompt>nixos-rebuild test --specialisation your-specialisation-name
</screen>
        This command can be also used to switch from the base system into a
        specialised one, or to switch between specialisations.
      </para>
     </listitem>
    </varlistentry>

@@ -499,6 +535,21 @@
    </listitem>
   </varlistentry>

   <varlistentry>
    <term>
     <option>--specialisation</option>
    </term>
    <term>
     <option>-c</option>
    </term>
    <listitem>
     <para>
      Activates given specialisation; when not specified, switching and testing
      will activate the base, unspecialised system.
     </para>
    </listitem>
   </varlistentry>

   <varlistentry>
    <term>
     <option>--build-host</option>
+2 −0
Original line number Diff line number Diff line
@@ -10,6 +10,8 @@ In addition to numerous new and upgraded packages, this release has the followin

- Cinnamon has been updated to 5.6, see [the pull request](https://github.com/NixOS/nixpkgs/pull/201328#issue-1449910204) for what is changed.

- `nixos-rebuild` now supports an extra `--specialisation` option that can be used to change specialisation for `switch` and `test` commands.

## New Services {#sec-release-23.05-new-services}

<!-- To avoid merge conflicts, consider adding your item at an arbitrary place in the list instead. -->
+1 −1
Original line number Diff line number Diff line
@@ -436,7 +436,6 @@ in {
  netdata = handleTest ./netdata.nix {};
  networking.networkd = handleTest ./networking.nix { networkd = true; };
  networking.scripted = handleTest ./networking.nix { networkd = false; };
  specialisation = handleTest ./specialisation.nix {};
  netbox = handleTest ./web-apps/netbox.nix {};
  # TODO: put in networking.nix after the test becomes more complete
  networkingProxy = handleTest ./networking-proxy.nix {};
@@ -464,6 +463,7 @@ in {
  nix-serve-ssh = handleTest ./nix-serve-ssh.nix {};
  nixops = handleTest ./nixops/default.nix {};
  nixos-generate-config = handleTest ./nixos-generate-config.nix {};
  nixos-rebuild-specialisations = handleTest ./nixos-rebuild-specialisations.nix {};
  nixpkgs = pkgs.callPackage ../modules/misc/nixpkgs/test.nix { inherit evalMinimalConfig; };
  node-red = handleTest ./node-red.nix {};
  nomad = handleTest ./nomad.nix {};
+131 −0
Original line number Diff line number Diff line
import ./make-test-python.nix ({ pkgs, ... }: {
  name = "nixos-rebuild-specialisations";

  nodes = {
    machine = { lib, pkgs, ... }: {
      imports = [
        ../modules/profiles/installation-device.nix
        ../modules/profiles/base.nix
      ];

      nix.settings = {
        substituters = lib.mkForce [ ];
        hashed-mirrors = null;
        connect-timeout = 1;
      };

      system.extraDependencies = with pkgs; [
        curl
        desktop-file-utils
        docbook5
        docbook_xsl_ns
        grub2
        kmod.dev
        libarchive
        libarchive.dev
        libxml2.bin
        libxslt.bin
        python3Minimal
        shared-mime-info
        stdenv
        sudo
        xorg.lndir
      ];

      virtualisation = {
        cores = 2;
        memorySize = 2048;
      };
    };
  };

  testScript =
    let
      configFile = pkgs.writeText "configuration.nix" ''
        { lib, pkgs, ... }: {
          imports = [
            ./hardware-configuration.nix
            <nixpkgs/nixos/modules/testing/test-instrumentation.nix>
          ];

          boot.loader.grub = {
            enable = true;
            device = "/dev/vda";
            forceInstall = true;
          };

          documentation.enable = false;

          environment.systemPackages = [
            (pkgs.writeShellScriptBin "parent" "")
          ];

          specialisation.foo = {
            inheritParentConfig = true;

            configuration = { ... }: {
              environment.systemPackages = [
                (pkgs.writeShellScriptBin "foo" "")
              ];
            };
          };

          specialisation.bar = {
            inheritParentConfig = true;

            configuration = { ... }: {
              environment.systemPackages = [
                (pkgs.writeShellScriptBin "bar" "")
              ];
            };
          };
        }
      '';

    in
    ''
      machine.start()
      machine.succeed("udevadm settle")
      machine.wait_for_unit("multi-user.target")

      machine.succeed("nixos-generate-config")
      machine.copy_from_host(
          "${configFile}",
          "/etc/nixos/configuration.nix",
      )

      with subtest("Switch to the base system"):
          machine.succeed("nixos-rebuild switch")
          machine.succeed("parent")
          machine.fail("foo")
          machine.fail("bar")

      with subtest("Switch from base system into a specialization"):
          machine.succeed("nixos-rebuild switch --specialisation foo")
          machine.succeed("parent")
          machine.succeed("foo")
          machine.fail("bar")

      with subtest("Switch from specialization into another specialization"):
          machine.succeed("nixos-rebuild switch -c bar")
          machine.succeed("parent")
          machine.fail("foo")
          machine.succeed("bar")

      with subtest("Switch from specialization into the base system"):
          machine.succeed("nixos-rebuild switch")
          machine.succeed("parent")
          machine.fail("foo")
          machine.fail("bar")

      with subtest("Switch into specialization using `nixos-rebuild test`"):
          machine.succeed("nixos-rebuild test --specialisation foo")
          machine.succeed("parent")
          machine.succeed("foo")
          machine.fail("bar")

      with subtest("Make sure nonsense command combinations are forbidden"):
          machine.fail("nixos-rebuild boot --specialisation foo")
          machine.fail("nixos-rebuild boot -c foo")
    '';
})
Loading