Skip to content

Commit 76fc856

Browse files
MagicRBMic92
authored andcommitted
Fix build cancellation not working
Signed-off-by: magic_rb <[email protected]>
1 parent ed576ab commit 76fc856

File tree

1 file changed

+24
-15
lines changed

1 file changed

+24
-15
lines changed

buildbot_nix/__init__.py

Lines changed: 24 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,9 @@ class BuildTrigger(steps.BuildStep):
8383
dependency_failed_scheduler: str
8484
result_list: list[int]
8585
ended: bool
86+
running: bool
8687
wait_for_finish_deferred: defer.Deferred[tuple[list[int], int]] | None
88+
brids: list[int]
8789

8890
@dataclass
8991
class ScheduledJob:
@@ -132,9 +134,11 @@ def __init__(
132134
self.dependency_failed_scheduler = dependency_failed_scheduler
133135
self._result_list: list[int] = []
134136
self.ended = False
137+
self.running = False
135138
self.wait_for_finish_deferred: defer.Deferred[tuple[list[int], int]] | None = (
136139
None
137140
)
141+
self.brids = []
138142
super().__init__(**kwargs)
139143

140144
def interrupt(self, reason: str | Failure) -> None:
@@ -166,50 +170,51 @@ def get_scheduler_by_name(self, name: str) -> BaseScheduler:
166170

167171
@staticmethod
168172
def set_common_properties(
169-
props: Properties, source: str, job: NixEvalJob
173+
props: Properties, source: str, job: NixEvalJob, report_status: bool,
170174
) -> Properties:
171175
props.setProperty("virtual_builder_name", f".#checks.{job.attr}", source)
172176
props.setProperty("status_name", f"nix-build .#checks.{job.attr}", source)
173177
props.setProperty("virtual_builder_tags", "", source)
174178
props.setProperty("attr", job.attr, source)
179+
props.setProperty("report_status", report_status, source)
175180

176181
return props
177182

178-
def schedule_eval_failure(self, job: NixEvalJobError) -> tuple[str, Properties]:
183+
def schedule_eval_failure(self, job: NixEvalJobError, report_status: bool) -> tuple[str, Properties]:
179184
source = "nix-eval-nix"
180185

181-
props = BuildTrigger.set_common_properties(Properties(), source, job)
186+
props = BuildTrigger.set_common_properties(Properties(), source, job, report_status)
182187
props.setProperty("error", job.error, source)
183188

184189
return (self.failed_eval_scheduler, props)
185190

186-
def schedule_cached_failure(self, job: NixEvalJobSuccess) -> tuple[str, Properties]:
191+
def schedule_cached_failure(self, job: NixEvalJobSuccess, report_status: bool) -> tuple[str, Properties]:
187192
source = "nix-eval-nix"
188193

189-
props = BuildTrigger.set_common_properties(Properties(), source, job)
194+
props = BuildTrigger.set_common_properties(Properties(), source, job, report_status)
190195

191196
return (self.cached_failure_scheduler, props)
192197

193198
def schedule_dependency_failed(
194-
self, job: NixEvalJobSuccess, dependency: NixEvalJobSuccess
199+
self, job: NixEvalJobSuccess, dependency: NixEvalJobSuccess, report_status: bool,
195200
) -> tuple[str, Properties]:
196201
source = "nix-eval-nix"
197202

198-
props = BuildTrigger.set_common_properties(Properties(), source, job)
203+
props = BuildTrigger.set_common_properties(Properties(), source, job, report_status)
199204
props.setProperty("dependency.attr", dependency.attr, source)
200205

201206
return (self.dependency_failed_scheduler, props)
202207

203208
def schedule_success(
204-
self, build_props: Properties, job: NixEvalJobSuccess
209+
self, build_props: Properties, job: NixEvalJobSuccess, report_status: bool,
205210
) -> tuple[str, Properties]:
206211
source = "nix-eval-nix"
207212

208213
drv_path = job.drvPath
209214
system = job.system
210215
out_path = job.outputs["out"] or None
211216

212-
props = BuildTrigger.set_common_properties(Properties(), source, job)
217+
props = BuildTrigger.set_common_properties(Properties(), source, job, report_status)
213218
props.setProperty("system", system, source)
214219
props.setProperty("drv_path", drv_path, source)
215220
props.setProperty("out_path", out_path, source)
@@ -347,6 +352,7 @@ def get_failed_dependents(
347352

348353
@defer.inlineCallbacks
349354
def run(self) -> Generator[Any, Any, None]:
355+
self.running = True
350356
build_props = self.build.getProperties()
351357
ss_for_trigger = self.prepare_sourcestamp_list_for_trigger()
352358
scheduler_log: Log = yield self.addLog("scheduler")
@@ -357,7 +363,8 @@ def run(self) -> Generator[Any, Any, None]:
357363
scheduler_log.addStdout("The following jobs failed to evaluate:\n")
358364
for failed_job in self.failed_jobs:
359365
scheduler_log.addStdout(f"\t- {failed_job.attr} failed eval\n")
360-
yield self.schedule(ss_for_trigger, *self.schedule_eval_failure(failed_job))
366+
brids, _ = yield self.schedule(ss_for_trigger, *self.schedule_eval_failure(failed_job, self.report_status))
367+
self.brids.extend(brids)
361368

362369
# get all input derivations for every job as a dictionary
363370
derivations_inputs: dict[str, set[str]] = {
@@ -400,11 +407,12 @@ def run(self) -> Generator[Any, Any, None]:
400407
build_schedule_order.remove(build)
401408

402409
brids, results_deferred = yield self.schedule(
403-
ss_for_trigger, *self.schedule_cached_failure(build)
410+
ss_for_trigger, *self.schedule_cached_failure(build, self.report_status)
404411
)
405412
scheduled.append(
406413
BuildTrigger.ScheduledJob(build, brids, results_deferred)
407414
)
415+
self.brids.extend(brids.values())
408416
elif (
409417
failed_builds.check_build(build.drvPath)
410418
and self.build.reason == "rebuild"
@@ -426,13 +434,15 @@ def run(self) -> Generator[Any, Any, None]:
426434
for job in schedule_now:
427435
scheduler_log.addStdout(f"\t- {job.attr}\n")
428436
brids, results_deferred = yield self.schedule(
429-
ss_for_trigger, *self.schedule_success(build_props, job)
437+
ss_for_trigger, *self.schedule_success(build_props, job, self.report_status)
430438
)
431439

432440
scheduled.append(
433441
BuildTrigger.ScheduledJob(job, brids, results_deferred)
434442
)
435443

444+
self.brids.extend(brids.values())
445+
436446
scheduler_log.addStdout("Waiting...\n")
437447

438448
# wait for one to complete
@@ -462,14 +472,15 @@ def run(self) -> Generator[Any, Any, None]:
462472
job, build_schedule_order, job_closures
463473
)
464474
for removed_job in removed:
465-
scheduler, props = self.schedule_dependency_failed(removed_job, job)
475+
scheduler, props = self.schedule_dependency_failed(removed_job, job, self.report_status)
466476
brids, results_deferred = yield self.schedule(
467477
ss_for_trigger, scheduler, props
468478
)
469479
build_schedule_order.remove(removed_job)
470480
scheduled.append(
471481
BuildTrigger.ScheduledJob(removed_job, brids, results_deferred)
472482
)
483+
self.brids.extend(brids.values())
473484
scheduler_log.addStdout(
474485
"\t- removed jobs: "
475486
+ ", ".join([job.drvPath for job in removed])
@@ -555,8 +566,6 @@ def run(self) -> Generator[Any, object, Any]:
555566
failed_jobs: list[NixEvalJobError] = []
556567
successful_jobs: list[NixEvalJobSuccess] = []
557568

558-
log.info("jobs: {jobs}", jobs=jobs)
559-
560569
for job in jobs:
561570
# report unbuildable jobs
562571
if isinstance(job, NixEvalJobError):

0 commit comments

Comments
 (0)