5cb3d2e6

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

Read the flake output from flake.nix where it needs nothing more

A repository with no nix-ci.nix configures NixCI through its flake's
`nix-ci` output. Reading that output used to fetch the whole flake and
its inputs, which is most of what cloning the repository would have cost
and undoes the point of the tool for every repository configured this
way.

The ordinary output is a pure function of flake.nix: `outputs = _: {
nix-ci = {...}; }` looks at neither `self` nor any input. So the output
is now applied to an argument that raises the moment it is forced, and
read from the flake.nix already in hand. A result means the output
ignored that argument and is therefore bit for bit what the full
evaluation would have produced; an output that does reach for `self` or
an input forces the argument, and only then is the flake fetched in
full.

The output-reading accessor shares the fetch cache with the one that
asserted flake.nix, so a repository with no configuration file is still
read in two requests.

The forge suite covers a flake-output repository and a no-config one
read this way, and one whose output looks at `self` to assert it is not
answered from flake.nix but deferred to the full fetch.