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 | 6m08s | 2s | 2s | 6m10s | 6m08s |
| Eval | 6m10s | 17s | 17s | 6m27s | 0s |
| Build | 48m23s | 37s | 37s | 49m00s | 41m56s |
| Suite | 6m08s | 56s | 42m52s | 49m00s | 48m04s |