nix-bisect icon indicating copy to clipboard operation
nix-bisect copied to clipboard

Allow marking as bad immediately after encountering --failure-line

Open jtojnar opened this issue 5 years ago • 1 comments

Recently, I have been bisecting GNOME failing to start in VM. The failure could be discerned by a permission error being logged shortly after boot but the test VM continued running, trying to start the session. And when that failed, the test got stuck waiting for X that would never arrive.

In the end I decided to use the following bisection script but it would be nice if nix-build-status could terminate the build immediately after `--failure-line appears.

content=$(timeout 1m nix-build nixos/release-combined.nix -A nixos.tests.gnome3-xorg.x86_64-linux 2>&1)

if [[ $content =~ "systemd-logind: failed to take device /dev/dri/card0: Operation not permitted" ]]; then
    exit 1
elif [[ $content =~ 'systemd-logind: got fd for /dev/dri/card0' ]]; then
    exit 0
else
    exit 125
fi

jtojnar avatar Apr 09 '20 12:04 jtojnar

Yes, I agree that this would be nice. I tried supporting that in some early prototype. The problem is that nix build truncates its output and actually skips some lines (it has some sort of limited refresh rate). Because of that, it is not useful to parse the output of nix build. At the same time I think printing the output of nix build to the terminal during bisection is very helpful, so we can't just use nix-build instead. Currently I use nix build followed by nix log, but that makes it necessary to wait for the build to succeed.

It might actually be possible to query the log of an unfinished build, but that would be a pretty hacky solution requiring multiple threads.

I recently discovered the -L flag to nix build. That would make it possible to parse the output while still displaying a well-formatted status to the user. Experimenting with that is already on my todo list.

timokau avatar Apr 09 '20 12:04 timokau