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 | 2m39s | 2s | 2s | 2m41s | 2m39s |
| Eval | 2m47s | 6s | 6s | 2m53s | 5s |
| Build | 2m50s | 42s | 2m06s | 4m56s | 1m30s |
| Suite | 2m39s | 50s | 2m17s | 4m56s | 4m15s |