mirror of
https://github.com/NixOS/nix.git
synced 2024-11-25 08:12:29 +00:00
Use nixosTest.quickBuild behavior by default
This wasn't the default behaviour because: > We don't enable this by default to avoid the mostly unnecessary work of > performing an additional build of the package in cases where we build > the package normally anyway, such as in our pre-merge CI. Since we have a componentized build, we've solved the duplication. In the new situation, building both with and without unit tests isn't any slow than just a build with unit tests, so there's no point in using the unit-tested build anymore. By using the otherwise untested build, we reduce the minimum build time towards the NixOS test, at no cost. If you want to run all tests, build all attributes.
This commit is contained in:
parent
b02601cd0c
commit
d4aa7d5dc7
@ -276,14 +276,12 @@ To ensure that characterisation testing doesn't make it harder to intentionally
|
|||||||
We run the functional tests not just in the build, but also in VM tests.
|
We run the functional tests not just in the build, but also in VM tests.
|
||||||
This helps us ensure that Nix works correctly on NixOS, and environments that have similar characteristics that are hard to reproduce in a build environment.
|
This helps us ensure that Nix works correctly on NixOS, and environments that have similar characteristics that are hard to reproduce in a build environment.
|
||||||
|
|
||||||
The recommended way to run these tests during development is:
|
These can be run with:
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
nix build .#hydraJobs.tests.functional_user.quickBuild
|
nix build .#hydraJobs.tests.functional_user
|
||||||
```
|
```
|
||||||
|
|
||||||
The `quickBuild` attribute configures the test to use a `nix` package that's built without integration tests, so that you can iterate on the tests without performing recompilations due to the changed sources for `installCheck`.
|
|
||||||
|
|
||||||
Generally, this build is sufficient, but in nightly or CI we also test the attributes `functional_root` and `functional_trusted`, in which the test suite is run with different levels of authorization.
|
Generally, this build is sufficient, but in nightly or CI we also test the attributes `functional_root` and `functional_trusted`, in which the test suite is run with different levels of authorization.
|
||||||
|
|
||||||
## Integration tests
|
## Integration tests
|
||||||
@ -294,8 +292,6 @@ Because these tests are expensive and require more than what the standard github
|
|||||||
|
|
||||||
You can run them manually with `nix build .#hydraJobs.tests.{testName}` or `nix-build -A hydraJobs.tests.{testName}`.
|
You can run them manually with `nix build .#hydraJobs.tests.{testName}` or `nix-build -A hydraJobs.tests.{testName}`.
|
||||||
|
|
||||||
If you are testing a build of `nix` that you haven't compiled yet, you may iterate faster by appending the `quickBuild` attribute: `nix build .#hydraJobs.tests.{testName}.quickBuild`.
|
|
||||||
|
|
||||||
## Installer tests
|
## Installer tests
|
||||||
|
|
||||||
After a one-time setup, the Nix repository's GitHub Actions continuous integration (CI) workflow can test the installer each time you push to a branch.
|
After a one-time setup, the Nix repository's GitHub Actions continuous integration (CI) workflow can test the installer each time you push to a branch.
|
||||||
|
@ -4,20 +4,24 @@ let
|
|||||||
|
|
||||||
nixos-lib = import (nixpkgs + "/nixos/lib") { };
|
nixos-lib = import (nixpkgs + "/nixos/lib") { };
|
||||||
|
|
||||||
|
noTests = pkg: pkg.overrideAttrs (
|
||||||
|
finalAttrs: prevAttrs: {
|
||||||
|
doCheck = false;
|
||||||
|
doInstallCheck = false;
|
||||||
|
});
|
||||||
|
|
||||||
# https://nixos.org/manual/nixos/unstable/index.html#sec-calling-nixos-tests
|
# https://nixos.org/manual/nixos/unstable/index.html#sec-calling-nixos-tests
|
||||||
runNixOSTestFor = system: test:
|
runNixOSTestFor = system: test:
|
||||||
(nixos-lib.runTest {
|
(nixos-lib.runTest {
|
||||||
imports = [
|
imports = [
|
||||||
test
|
test
|
||||||
|
|
||||||
# Add the quickBuild attribute to the check packages
|
|
||||||
./quick-build.nix
|
|
||||||
];
|
];
|
||||||
|
|
||||||
hostPkgs = nixpkgsFor.${system}.native;
|
hostPkgs = nixpkgsFor.${system}.native;
|
||||||
defaults = {
|
defaults = {
|
||||||
nixpkgs.pkgs = nixpkgsFor.${system}.native;
|
nixpkgs.pkgs = nixpkgsFor.${system}.native;
|
||||||
nix.checkAllErrors = false;
|
nix.checkAllErrors = false;
|
||||||
|
nix.package = noTests nixpkgsFor.${system}.native.nix;
|
||||||
};
|
};
|
||||||
_module.args.nixpkgs = nixpkgs;
|
_module.args.nixpkgs = nixpkgs;
|
||||||
_module.args.system = system;
|
_module.args.system = system;
|
||||||
@ -29,6 +33,9 @@ let
|
|||||||
forNix = nixVersion: runNixOSTestFor system {
|
forNix = nixVersion: runNixOSTestFor system {
|
||||||
imports = [test];
|
imports = [test];
|
||||||
defaults.nixpkgs.overlays = [(curr: prev: {
|
defaults.nixpkgs.overlays = [(curr: prev: {
|
||||||
|
# NOTE: noTests pkg might not have been built yet for some older versions of the package
|
||||||
|
# and in versions before 2.25, the untested build wasn't shared with the tested build yet
|
||||||
|
# Add noTests here when those versions become irrelevant.
|
||||||
nix = (builtins.getFlake "nix/${nixVersion}").packages.${system}.nix;
|
nix = (builtins.getFlake "nix/${nixVersion}").packages.${system}.nix;
|
||||||
})];
|
})];
|
||||||
};
|
};
|
||||||
|
@ -1,47 +0,0 @@
|
|||||||
test@{ lib, extendModules, ... }:
|
|
||||||
let
|
|
||||||
inherit (lib) mkOption types;
|
|
||||||
in
|
|
||||||
{
|
|
||||||
options = {
|
|
||||||
quickBuild = mkOption {
|
|
||||||
description = ''
|
|
||||||
Whether to perform a "quick" build of the Nix package to test.
|
|
||||||
|
|
||||||
When iterating on the functional tests, it's recommended to "set" this
|
|
||||||
to `true`, so that changes to the functional tests don't require any
|
|
||||||
recompilation of the package.
|
|
||||||
You can do so by building the `.quickBuild` attribute on the check package,
|
|
||||||
e.g:
|
|
||||||
```console
|
|
||||||
nix build .#hydraJobs.functional_user.quickBuild
|
|
||||||
```
|
|
||||||
|
|
||||||
We don't enable this by default to avoid the mostly unnecessary work of
|
|
||||||
performing an additional build of the package in cases where we build
|
|
||||||
the package normally anyway, such as in our pre-merge CI.
|
|
||||||
'';
|
|
||||||
type = types.bool;
|
|
||||||
default = false;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
config = {
|
|
||||||
passthru.quickBuild =
|
|
||||||
let withQuickBuild = extendModules { modules = [{ quickBuild = true; }]; };
|
|
||||||
in withQuickBuild.config.test;
|
|
||||||
|
|
||||||
defaults = { pkgs, ... }: {
|
|
||||||
config = lib.mkIf test.config.quickBuild {
|
|
||||||
nix.package = pkgs.nixComponents.nix-cli;
|
|
||||||
|
|
||||||
system.forbiddenDependenciesRegexes = [
|
|
||||||
# This would indicate that the quickBuild feature is broken.
|
|
||||||
# It could happen if NixOS has a dependency on pkgs.nix instead of
|
|
||||||
# config.nix.package somewhere.
|
|
||||||
(builtins.unsafeDiscardStringContext pkgs.nix.outPath)
|
|
||||||
];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user