nixpkgs/ci/eval
Silvan Mosberger bf80cf0f2e ci/eval: Allow disallowed attrs to depend on other disallowed attrs
With a dependency chain like

    a -> b -> c

it was not possible to e.g. add a `meta.problems.removal` to b, because that would cause b to be entirely unavailable as a dependency.

This PR slightly lifts that restriction by allowing both a and b to be marked with such a problem without causing a CI failure.

This is useful for:
- Having a problem on a package that needs to be removed but still has dependents (which then also need a problem)
- Having a problem on a package that is aliased under another attribute, which counts as a dependency
2026-06-30 16:12:39 +02:00
..
compare ci/eval: name the base branch in the performance comparison summary 2026-06-17 01:08:45 +03:00
chunk.nix ci/eval: Allow preventing internal Nixpkgs use of certain problem kinds 2026-06-24 12:26:03 +02:00
default.nix ci/eval: Allow disallowed attrs to depend on other disallowed attrs 2026-06-30 16:12:39 +02:00
diff.nix workflows/eval: upload maintainer list of all packages as artifact 2025-10-31 10:59:01 +01:00
outpaths.nix ci/eval: Allow preventing internal Nixpkgs use of certain problem kinds 2026-06-24 12:26:03 +02:00
pre-eval.nix ci/eval: Allow preventing internal Nixpkgs use of certain problem kinds 2026-06-24 12:26:03 +02:00
README.md {ci/eval,release}: migrate supported systems to top-level 2026-02-27 13:45:31 +00:00

Nixpkgs CI evaluation

The code in this directory is used by the eval.yml GitHub Actions workflow to evaluate the majority of Nixpkgs for all PRs, effectively making sure that when the development branches are processed by Hydra, no evaluation failures are encountered.

Furthermore it also allows local evaluation using:

nix-build ci -A eval.baseline

The two most important arguments are:

  • --arg evalSystems: The set of systems for which nixpkgs should be evaluated. Defaults to the supported systems for the branch. Example: --arg evalSystems '["x86_64-linux" "aarch64-darwin"]'
  • --arg quickTest: Enables testing a single chunk of the current system only for quick iteration. Example: --arg quickTest true

The following arguments can be used to fine-tune performance:

  • --max-jobs: The maximum number of derivations to run at the same time. Only each supported system gets a separate derivation, so it doesn't make sense to set this higher than that number.
  • --cores: The number of cores to use for each job. Recommended to set this to the number of cores on your system divided by --max-jobs.
  • --arg chunkSize: The number of attributes that are evaluated simultaneously on a single core. Lowering this decreases memory usage at the cost of increased evaluation time. If this is too high, there won't be enough chunks to process them in parallel, and will also increase evaluation time. The default is 5000. Example: --arg chunkSize 10000

Note that 16GB memory is the recommended minimum, while with less than 8GB memory evaluation time suffers greatly.

Local eval with rebuilds / comparison

To compare two commits locally, first run the following on the baseline commit:

nix-build ci -A eval.baseline --out-link baseline

Then, on the commit with your changes:

nix-build ci -A eval.full --arg baseline ./baseline

Keep in mind to otherwise pass the same set of arguments for both commands (evalSystems, quickTest, chunkSize). Running this command will evaluate the difference between the baseline statistics and the ones at the time of running the command. From that difference, it will produce a human-readable report in $out/step-summary.md. If no packages were added or removed, then performance statistics will also be generated as part of this report.