1c26ef2b

By: Tom Sydney Kerckhove <syd@cs-syd.eu>

Discover the dependency graph as well, synchronously

Discovery derives the job graph from the derivations, so the manual
graph shrinks to the edges that are not derivation dependencies at all
and that nothing can therefore discover: 10 of the 80 it used to
carry. Discovered edges merge with configured ones, so the other 70 are
not lost, they are found.

I measured rather than guessed which ones those are: for each edge, is
the dependency's derivation in the dependent's input closure. The ten
that are not divide in two:

- the impure test runners are small scripts that run `nix build`
  themselves, so nothing in their derivations mentions the nextest
  archives, the python module or the cargo artifacts they will ask for.
  Without these edges each runner builds its own copy.
- gammaloop-fmt gates packages.gammaloop rather than feeding it.

Discovery is synchronous, so no job starts before the graph is known.
An edge missing from a hand-written graph lets two jobs build the same
derivation at once and we pay for both, which is the shape of the
duplicate work in the suites we looked at.
GitHub
configurex86_64-linux