grafana-alloy: don't build the frontend twice
[NixPkgs.git] / nixos / modules / misc / nixpkgs / test.nix
blobe70b7a12e8dd75c6310f7a7fd74fdb21f89983fd
1 # [nixpkgs]$ nix-build -A nixosTests.nixpkgs --show-trace
3 { evalMinimalConfig, pkgs, lib, stdenv }:
4 let
5   eval = mod: evalMinimalConfig {
6     imports = [ ../nixpkgs.nix mod ];
7   };
8   withHost = eval {
9     nixpkgs.hostPlatform = "aarch64-linux";
10   };
11   withHostAndBuild = eval {
12     nixpkgs.hostPlatform = "aarch64-linux";
13     nixpkgs.buildPlatform = "aarch64-darwin";
14   };
15   withSameHostAndBuild = eval {
16     nixpkgs.hostPlatform = "aarch64-linux";
17     nixpkgs.buildPlatform = "aarch64-linux";
18   };
19   externalPkgsWithConfig = {
20     _file = "ext-pkgs-config.nix";
21     nixpkgs.pkgs = pkgs;
22     nixpkgs.config.allowUnfree = true;
23   };
24   ambiguous = {
25     _file = "ambiguous.nix";
26     nixpkgs.hostPlatform = "aarch64-linux";
27     nixpkgs.buildPlatform = "aarch64-darwin";
28     nixpkgs.system = "x86_64-linux";
29     nixpkgs.localSystem.system = "x86_64-darwin";
30     nixpkgs.crossSystem.system = "i686-linux";
31     imports = [
32       { _file = "repeat.nix";
33         nixpkgs.hostPlatform = "aarch64-linux";
34       }
35     ];
36   };
37   getErrors = module:
38     let
39       uncheckedEval = lib.evalModules { modules = [ ../nixpkgs.nix module ]; };
40     in map (ass: ass.message) (lib.filter (ass: !ass.assertion) uncheckedEval.config.assertions);
42   readOnlyUndefined = evalMinimalConfig {
43     imports = [ ./read-only.nix ];
44   };
46   readOnlyBad = evalMinimalConfig {
47     imports = [ ./read-only.nix ];
48     nixpkgs.pkgs = { };
49   };
51   readOnly = evalMinimalConfig {
52     imports = [ ./read-only.nix ];
53     nixpkgs.pkgs = pkgs;
54   };
56   readOnlyBadConfig = evalMinimalConfig {
57     imports = [ ./read-only.nix ];
58     nixpkgs.pkgs = pkgs;
59     nixpkgs.config.allowUnfree = true; # do in pkgs instead!
60   };
62   readOnlyBadOverlays = evalMinimalConfig {
63     imports = [ ./read-only.nix ];
64     nixpkgs.pkgs = pkgs;
65     nixpkgs.overlays = [ (_: _: {}) ]; # do in pkgs instead!
66   };
68   readOnlyBadHostPlatform = evalMinimalConfig {
69     imports = [ ./read-only.nix ];
70     nixpkgs.pkgs = pkgs;
71     nixpkgs.hostPlatform = "foo-linux"; # do in pkgs instead!
72   };
74   readOnlyBadBuildPlatform = evalMinimalConfig {
75     imports = [ ./read-only.nix ];
76     nixpkgs.pkgs = pkgs;
77     nixpkgs.buildPlatform = "foo-linux"; # do in pkgs instead!
78   };
80   throws = x: ! (builtins.tryEval x).success;
83 lib.recurseIntoAttrs {
84   invokeNixpkgsSimple =
85     (eval {
86       nixpkgs.system = stdenv.hostPlatform.system;
87     })._module.args.pkgs.hello;
88   assertions =
89     assert withHost._module.args.pkgs.stdenv.hostPlatform.system == "aarch64-linux";
90     assert withHost._module.args.pkgs.stdenv.buildPlatform.system == "aarch64-linux";
91     assert withHostAndBuild._module.args.pkgs.stdenv.hostPlatform.system == "aarch64-linux";
92     assert withHostAndBuild._module.args.pkgs.stdenv.buildPlatform.system == "aarch64-darwin";
93     assert withSameHostAndBuild.config.nixpkgs.buildPlatform == withSameHostAndBuild.config.nixpkgs.hostPlatform;
94     assert withSameHostAndBuild._module.args.pkgs.stdenv.buildPlatform == withSameHostAndBuild._module.args.pkgs.stdenv.hostPlatform;
95     assert builtins.trace (lib.head (getErrors ambiguous))
96       getErrors ambiguous ==
97         [''
98           Your system configures nixpkgs with the platform parameters:
99           nixpkgs.hostPlatform, with values defined in:
100             - repeat.nix
101             - ambiguous.nix
102           nixpkgs.buildPlatform, with values defined in:
103             - ambiguous.nix
105           However, it also defines the legacy options:
106           nixpkgs.system, with values defined in:
107             - ambiguous.nix
108           nixpkgs.localSystem, with values defined in:
109             - ambiguous.nix
110           nixpkgs.crossSystem, with values defined in:
111             - ambiguous.nix
113           For a future proof system configuration, we recommend to remove
114           the legacy definitions.
115         ''];
116     assert builtins.trace (lib.head (getErrors externalPkgsWithConfig))
117       getErrors externalPkgsWithConfig ==
118         [''
119           Your system configures nixpkgs with an externally created instance.
120           `nixpkgs.config` options should be passed when creating the instance instead.
122           Current value:
123           {
124             allowUnfree = true;
125           }
127           Defined in:
128             - ext-pkgs-config.nix
129         ''];
130     assert getErrors {
131         nixpkgs.localSystem = pkgs.stdenv.hostPlatform;
132         nixpkgs.hostPlatform = pkgs.stdenv.hostPlatform;
133         nixpkgs.pkgs = pkgs;
134       } == [];
137     # Tests for the read-only.nix module
138     assert readOnly._module.args.pkgs.stdenv.hostPlatform.system == pkgs.stdenv.hostPlatform.system;
139     assert throws readOnlyBad._module.args.pkgs.stdenv;
140     assert throws readOnlyUndefined._module.args.pkgs.stdenv;
141     assert throws readOnlyBadConfig._module.args.pkgs.stdenv;
142     assert throws readOnlyBadOverlays._module.args.pkgs.stdenv;
143     assert throws readOnlyBadHostPlatform._module.args.pkgs.stdenv;
144     assert throws readOnlyBadBuildPlatform._module.args.pkgs.stdenv;
145     # read-only.nix does not provide legacy options, for the sake of simplicity
146     # If you're bothered by this, upgrade your configs to use the new *Platform
147     # options.
148     assert !readOnly.options.nixpkgs?system;
149     assert !readOnly.options.nixpkgs?localSystem;
150     assert !readOnly.options.nixpkgs?crossSystem;
152     pkgs.emptyFile;