From 00adb6e8f347ea6fee328641c4413946a41af5a2 Mon Sep 17 00:00:00 2001 From: zseri Date: Mon, 27 Dec 2021 04:52:40 +0100 Subject: [PATCH] feat(nix/yants): improve error message for errornous predicate while trying to yantsify `mkSecrets` in https://cl.tvl.fyi/c/depot/+/4688, I(zseri) needed to debug a failing evaluation which boiled down to a result.ok containing something which wasn't boolean, but the error message didn't indicate where that value came from. I debugged yants and found that the only place which didn't simply combine boolean values or use functions which always return booleans, I managed to isolate the error to the `pred v` expression. To avoid the necessity to debug yants to find this, I improve the error message for this case to mention that - a restriction predicate is invalid - what's the name of the failing restriction - the unexpected predicate return value Change-Id: I6c570a33ccc5afc445f208e2e8855c49fb37abaf Reviewed-on: https://cl.tvl.fyi/c/depot/+/4698 Tested-by: BuildkiteCI Reviewed-by: zseri Reviewed-by: tazjin Autosubmit: zseri --- nix/yants/default.nix | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/nix/yants/default.nix b/nix/yants/default.nix index 058444d27..2bbf4dd15 100644 --- a/nix/yants/default.nix +++ b/nix/yants/default.nix @@ -317,10 +317,15 @@ in lib.fix (self: { in if !(t.checkToBool res) then res - else { - ok = pred v; - err = "${prettyPrint v} does not conform to restriction '${restriction}'"; - }; + else + let + iok = pred v; + in if isBool iok then { + ok = iok; + err = "${prettyPrint v} does not conform to restriction '${restriction}'"; + } else + # use throw here to avoid spamming the build log + throw "restriction '${restriction}' predicate returned unexpected value '${prettyPrint iok}' instead of boolean"; }; })