feat: Report evaluation errors and fail the damn build
I am being the fallback maintainer on this one and putting my foot down and fixing it. We should have fixed this months ago, but such as it is. Fixes: lix-project/lix#237
This commit is contained in:
parent
48828cb33f
commit
510ee842bb
|
@ -381,6 +381,7 @@ class NixEvalCommand(buildstep.ShellMixin, steps.BuildStep):
|
||||||
if result == util.SUCCESS:
|
if result == util.SUCCESS:
|
||||||
# create a ShellCommand for each stage and add them to the build
|
# create a ShellCommand for each stage and add them to the build
|
||||||
jobs = []
|
jobs = []
|
||||||
|
eval_errors: list[tuple[str, str]] = []
|
||||||
|
|
||||||
for line in self.observer.getStdout().split("\n"):
|
for line in self.observer.getStdout().split("\n"):
|
||||||
if line != "":
|
if line != "":
|
||||||
|
@ -392,11 +393,22 @@ class NixEvalCommand(buildstep.ShellMixin, steps.BuildStep):
|
||||||
jobs.append(job)
|
jobs.append(job)
|
||||||
filtered_jobs = []
|
filtered_jobs = []
|
||||||
for job in jobs:
|
for job in jobs:
|
||||||
|
if err := job.get("error"):
|
||||||
|
eval_errors.append((job.get('attr'), err))
|
||||||
|
|
||||||
system = job.get("system")
|
system = job.get("system")
|
||||||
if not system or system in self.supported_systems: # report eval errors
|
if not system or system in self.supported_systems:
|
||||||
filtered_jobs.append(job)
|
filtered_jobs.append(job)
|
||||||
|
|
||||||
drv_show_log: Log = yield self.getLog("stdio")
|
drv_show_log: Log = yield self.getLog("stdio")
|
||||||
|
|
||||||
|
if eval_errors:
|
||||||
|
msg = "Failing job due to evaluation errors!\n"
|
||||||
|
msg += "\n".join(
|
||||||
|
f"- {attr}: {failure}" for (attr, failure) in eval_errors)
|
||||||
|
drv_show_log.addStdout(msg)
|
||||||
|
raise BuildbotNixError("Evaluation error in attributes: " + ", ".join(attr for (attr, _) in eval_errors))
|
||||||
|
|
||||||
drv_show_log.addStdout(f"getting derivation infos\n")
|
drv_show_log.addStdout(f"getting derivation infos\n")
|
||||||
cmd = yield self.makeRemoteShellCommand(
|
cmd = yield self.makeRemoteShellCommand(
|
||||||
stdioLogName=None,
|
stdioLogName=None,
|
||||||
|
|
Loading…
Reference in a new issue