5c997421

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.

Suite timing

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

Timeline

0s50s