By: Tom Sydney Kerckhove <syd@cs-syd.eu>
nix-ci-eval: a fast, parallel flake-output discoverer A small tool that discovers a flake's buildable outputs for one system, purpose-built for NixCI's show jobs. It links only the LGPL-2.1 Nix evaluator libraries. Given a flake reference and a system it streams one newline-delimited JSON object per discovered output, tagged by type (job / error / dependency), then the dependency edges between the outputs. Each attribute path carries its system component so it names the attribute exactly as `nix build` takes it, and a failing attribute becomes an error line rather than aborting the run. A coordinator forks worker processes, each with its own Nix evaluator. --workers is a ceiling, not a count: the pool grows on demand, sized from what the run measures an evaluation and a worker to cost, so a small flake never forks a pool it cannot keep busy and a large one still ramps to the ceiling. Tested by pure unit tests for the Nix-free helpers and a hermetic integration test that drives the built binary against a fixture flake with no inputs and diffs a golden.
| Time to Start | Worker time | Duration | Time to finish | Idle | |
| Config | 43s | 1s | 1s | 45s | 43s |
| Eval | 45s | 4s | 4s | 50s | 0s |
| Build | 48s | 0s | 0s | 48s | 0s |
| Suite | 43s | 6s | 6s | 50s | 43s |