mirror of
https://github.com/NixOS/nixpkgs.git
synced 2025-06-10 11:45:45 +03:00
macOS support for NixOS tests (#282401)
Closes #193336 Closes #261694 Related to #108984 The goal here was to get the following flake to build and run on `aarch64-darwin`: ```nix { inputs.nixpkgs.url = <this branch>; outputs = { nixpkgs, ... }: { checks.aarch64-darwin.default = nixpkgs.legacyPackages.aarch64-darwin.nixosTest { name = "test"; nodes.machine = { }; testScript = ""; }; }; } ``` … and after this change it does. There's no longer a need for the user to set `nodes.*.nixpkgs.pkgs` or `nodes.*.virtualisation.host.pkgs` as the correct values are inferred from the host system.
This commit is contained in:
parent
458b097d81
commit
b8698cd8d6
9 changed files with 51 additions and 10 deletions
|
@ -14,6 +14,25 @@ let
|
|||
types
|
||||
;
|
||||
|
||||
inherit (hostPkgs) hostPlatform;
|
||||
|
||||
guestSystem =
|
||||
if hostPlatform.isLinux
|
||||
then hostPlatform.system
|
||||
else
|
||||
let
|
||||
hostToGuest = {
|
||||
"x86_64-darwin" = "x86_64-linux";
|
||||
"aarch64-darwin" = "aarch64-linux";
|
||||
};
|
||||
|
||||
supportedHosts = lib.concatStringsSep ", " (lib.attrNames hostToGuest);
|
||||
|
||||
message =
|
||||
"NixOS Test: don't know which VM guest system to pair with VM host system: ${hostPlatform.system}. Perhaps you intended to run the tests on a Linux host, or one of the following systems that may run NixOS tests: ${supportedHosts}";
|
||||
in
|
||||
hostToGuest.${hostPlatform.system} or (throw message);
|
||||
|
||||
baseOS =
|
||||
import ../eval-config.nix {
|
||||
inherit lib;
|
||||
|
@ -27,13 +46,14 @@ let
|
|||
({ config, ... }:
|
||||
{
|
||||
virtualisation.qemu.package = testModuleArgs.config.qemu.package;
|
||||
virtualisation.host.pkgs = hostPkgs;
|
||||
})
|
||||
({ options, ... }: {
|
||||
key = "nodes.nix-pkgs";
|
||||
config = optionalAttrs (!config.node.pkgsReadOnly) (
|
||||
mkIf (!options.nixpkgs.pkgs.isDefined) {
|
||||
# TODO: switch to nixpkgs.hostPlatform and make sure containers-imperative test still evaluates.
|
||||
nixpkgs.system = hostPkgs.stdenv.hostPlatform.system;
|
||||
nixpkgs.system = guestSystem;
|
||||
}
|
||||
);
|
||||
})
|
||||
|
|
|
@ -2,7 +2,11 @@
|
|||
{
|
||||
config = {
|
||||
# default pkgs for use in VMs
|
||||
_module.args.pkgs = hostPkgs;
|
||||
_module.args.pkgs =
|
||||
# TODO: deprecate it everywhere; not just on darwin. Throw on darwin?
|
||||
lib.warnIf hostPkgs.stdenv.hostPlatform.isDarwin
|
||||
"Do not use the `pkgs` module argument in tests you want to run on darwin. It is ambiguous, and many tests are broken because of it. If you need to use a package on the VM host, use `hostPkgs`. Otherwise, use `config.node.pkgs`, or `config.nodes.<name>.nixpkgs.pkgs`."
|
||||
hostPkgs;
|
||||
|
||||
defaults = {
|
||||
# TODO: a module to set a shared pkgs, if options.nixpkgs.* is untouched by user (highestPrio) */
|
||||
|
|
|
@ -41,7 +41,9 @@ in
|
|||
rawTestDerivation = hostPkgs.stdenv.mkDerivation {
|
||||
name = "vm-test-run-${config.name}";
|
||||
|
||||
requiredSystemFeatures = [ "kvm" "nixos-test" ];
|
||||
requiredSystemFeatures = [ "nixos-test" ]
|
||||
++ lib.optionals hostPkgs.stdenv.hostPlatform.isLinux [ "kvm" ]
|
||||
++ lib.optionals hostPkgs.stdenv.hostPlatform.isDarwin [ "apple-virt" ];
|
||||
|
||||
buildCommand = ''
|
||||
mkdir -p $out
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue