1+ import copy
12import dataclasses
23import graphlib
34import json
45import multiprocessing
56import os
67import re
78from collections import defaultdict
8- from collections .abc import Generator
9+ from collections .abc import Generator , Iterable
910from dataclasses import dataclass
1011from datetime import UTC , datetime
1112from pathlib import Path
12- from typing import TYPE_CHECKING , Any , Iterable
13- import typing
14- import copy
13+ from typing import TYPE_CHECKING , Any
1514
1615from buildbot .config .builder import BuilderConfig
1716from buildbot .configurators import ConfiguratorBase
@@ -71,7 +70,6 @@ class BuildbotNixError(Exception):
7170class BuildTrigger (buildstep .ShellMixin , steps .BuildStep ):
7271 """Dynamic trigger that creates a build for every attribute."""
7372
74-
7573 successful_jobs : list [NixEvalJobSuccess ]
7674 failed_jobs : list [NixEvalJobError ]
7775 combined_build : bool
@@ -179,14 +177,10 @@ def set_common_properties(
179177
180178 return props
181179
182- def schedule_eval_failure (
183- self , job : NixEvalJobError
184- ) -> tuple [str , Properties ]:
180+ def schedule_eval_failure (self , job : NixEvalJobError ) -> tuple [str , Properties ]:
185181 source = "nix-eval-nix"
186182
187- props = BuildTrigger .set_common_properties (
188- Properties (), source , job
189- )
183+ props = BuildTrigger .set_common_properties (Properties (), source , job )
190184 props .setProperty ("error" , job .error , source )
191185
192186 return (self .failed_eval_scheduler , props )
@@ -196,9 +190,7 @@ def schedule_cached_failure(
196190 ) -> tuple [str , Properties ]:
197191 source = "nix-eval-nix"
198192
199- props = BuildTrigger .set_common_properties (
200- Properties (), source , job
201- )
193+ props = BuildTrigger .set_common_properties (Properties (), source , job )
202194 props .setProperty ("first_failure" , str (first_failure ), source )
203195
204196 return (self .cached_failure_scheduler , props )
@@ -210,9 +202,7 @@ def schedule_dependency_failed(
210202 ) -> tuple [str , Properties ]:
211203 source = "nix-eval-nix"
212204
213- props = BuildTrigger .set_common_properties (
214- Properties (), source , job
215- )
205+ props = BuildTrigger .set_common_properties (Properties (), source , job )
216206 props .setProperty ("dependency.attr" , dependency .attr , source )
217207
218208 return (self .dependency_failed_scheduler , props )
@@ -228,9 +218,7 @@ def schedule_success(
228218 system = job .system
229219 out_path = job .outputs ["out" ] or None
230220
231- props = BuildTrigger .set_common_properties (
232- Properties (), source , job
233- )
221+ props = BuildTrigger .set_common_properties (Properties (), source , job )
234222 props .setProperty ("system" , system , source )
235223 props .setProperty ("drv_path" , drv_path , source )
236224 props .setProperty ("out_path" , out_path , source )
@@ -270,7 +258,9 @@ def schedule(
270258 self ._add_results (brid )
271259
272260 if not self .combine_builds :
273- self .produceEventForBuildRequestsById (brids .values (), "started-nix-build" , None )
261+ self .produce_event_for_build_requests_by_id (
262+ brids .values (), "started-nix-build" , None
263+ )
274264
275265 return brids , results_deferred
276266
@@ -356,46 +346,53 @@ def get_failed_dependents(
356346 return removed
357347
358348 @defer .inlineCallbacks
359-
360- @defer .inlineCallbacks
361- def produceEventForBuildRequestsById (
362- self ,
363- buildrequest_ids : Iterable [int ],
364- event : str ,
365- result : None | int ,
349+ def produce_event_for_build_requests_by_id (
350+ self ,
351+ buildrequest_ids : Iterable [int ],
352+ event : str ,
353+ result : None | int ,
366354 ) -> Generator [Any , object , None ]:
367355 for buildrequest_id in buildrequest_ids :
368- builds : Any = yield self .master .data .get (('buildrequests' , str (buildrequest_id ), 'builds' ))
356+ builds : Any = yield self .master .data .get (
357+ ("buildrequests" , str (buildrequest_id ), "builds" )
358+ )
369359
370360 # only report with `buildrequets` if there are no builds to report for
371361 if not builds :
372- buildrequest : Any = yield self .master .data .get (('buildrequests' , str (buildrequest_id )))
373- if result is not None :
374- buildrequest ["results" ] = result
375- self .master .mq .produce (("buildrequests" , str (buildrequest ['buildrequestid' ]), event ), copy .deepcopy (buildrequest ))
362+ buildrequest : Any = yield self .master .data .get (
363+ ("buildrequests" , str (buildrequest_id ))
364+ )
365+ if result is not None :
366+ buildrequest ["results" ] = result
367+ self .master .mq .produce (
368+ ("buildrequests" , str (buildrequest ["buildrequestid" ]), event ),
369+ copy .deepcopy (buildrequest ),
370+ )
376371 else :
377372 for build in builds :
378- self .produceEventForBuild (event , build , result )
373+ self .produce_event_for_build (event , build , result )
379374
380375 @defer .inlineCallbacks
381- def produceEventForBuildById (
382- self ,
383- event : str ,
384- build_id : int ,
385- result : None | int ,
376+ def produce_event_for_build_by_id (
377+ self ,
378+ event : str ,
379+ build_id : int ,
380+ result : None | int ,
386381 ) -> Generator [Any , object , None ]:
387- build : Any = yield self .master .data .get ((' builds' , str (build_id )))
388- self .produceEventForBuild (event , build , result )
389-
390- def produceEventForBuild (
391- self ,
392- event : str ,
393- build : Any ,
394- result : None | int ,
382+ build : Any = yield self .master .data .get ((" builds" , str (build_id )))
383+ self .produce_event_for_build (event , build , result )
384+
385+ def produce_event_for_build (
386+ self ,
387+ event : str ,
388+ build : Any ,
389+ result : None | int ,
395390 ) -> None :
396391 if result is not None :
397392 build ["results" ] = result
398- self .master .mq .produce (("builds" , str (build ['buildid' ]), event ), copy .deepcopy (build ))
393+ self .master .mq .produce (
394+ ("builds" , str (build ["buildid" ]), event ), copy .deepcopy (build )
395+ )
399396
400397 @defer .inlineCallbacks
401398 def run (self ) -> Generator [Any , Any , None ]:
@@ -409,7 +406,9 @@ def run(self) -> Generator[Any, Any, None]:
409406 the receiving side.
410407 """
411408 if self .combine_builds :
412- self .produceEventForBuildById ("started-nix-build" , self .build .buildid , None )
409+ self .produce_event_for_build_by_id (
410+ "started-nix-build" , self .build .buildid , None
411+ )
413412
414413 done : list [BuildTrigger .DoneJob ] = []
415414 scheduled : list [BuildTrigger .ScheduledJob ] = []
@@ -469,9 +468,7 @@ def run(self) -> Generator[Any, Any, None]:
469468
470469 brids , results_deferred = yield self .schedule (
471470 ss_for_trigger ,
472- * self .schedule_cached_failure (
473- build , failed_build .time
474- ),
471+ * self .schedule_cached_failure (build , failed_build .time ),
475472 )
476473 scheduled .append (
477474 BuildTrigger .ScheduledJob (build , brids , results_deferred )
@@ -527,7 +524,9 @@ def run(self) -> Generator[Any, Any, None]:
527524 f"Found finished build { job .attr } , result { util .Results [result ].upper ()} \n "
528525 )
529526 if not self .combine_builds :
530- self .produceEventForBuildRequestsById (brids .values (), "finished-nix-build" , result )
527+ self .produce_event_for_build_requests_by_id (
528+ brids .values (), "finished-nix-build" , result
529+ )
531530
532531 # if it failed, remove all dependent jobs, schedule placeholders and add them to the list of scheduled jobs
533532 if isinstance (job , NixEvalJobSuccess ):
@@ -546,7 +545,9 @@ def run(self) -> Generator[Any, Any, None]:
546545 )
547546 build_schedule_order .remove (removed_job )
548547 scheduled .append (
549- BuildTrigger .ScheduledJob (removed_job , brids , results_deferred )
548+ BuildTrigger .ScheduledJob (
549+ removed_job , brids , results_deferred
550+ )
550551 )
551552 self .brids .extend (brids .values ())
552553 scheduler_log .addStdout (
@@ -565,7 +566,9 @@ def run(self) -> Generator[Any, Any, None]:
565566 )
566567
567568 if self .combine_builds :
568- self .produceEventForBuildById ("finished-nix-build" , self .build .buildid , overall_result )
569+ self .produce_event_for_build_by_id (
570+ "finished-nix-build" , self .build .buildid , overall_result
571+ )
569572 scheduler_log .addStdout ("Done!\n " )
570573 return overall_result
571574
@@ -604,27 +607,28 @@ def __init__(
604607 self .job_report_limit = job_report_limit
605608
606609 @defer .inlineCallbacks
607- def produceEvent (
608- self ,
609- event : str ,
610- result : None | int
611- ) -> Generator [Any , object , None ]:
612- build = yield self .master .data .get (('builds' , str (self .build .buildid )))
613- buildT = typing .cast (dict [str , Any ], build )
610+ def produce_event (
611+ self , event : str , result : None | int
612+ ) -> Generator [Any , Any , None ]:
613+ build : dict [str , Any ] = yield self .master .data .get (
614+ ("builds" , str (self .build .buildid ))
615+ )
614616 if result is not None :
615- buildT ["results" ] = result
616- self .master .mq .produce (("builds" , str (self .build .buildid ), event ), copy .deepcopy (buildT ))
617+ build ["results" ] = result
618+ self .master .mq .produce (
619+ ("builds" , str (self .build .buildid ), event ), copy .deepcopy (build )
620+ )
617621
618622 @defer .inlineCallbacks
619623 def run (self ) -> Generator [Any , object , Any ]:
620- self .produceEvent ("started-nix-eval" , None )
624+ self .produce_event ("started-nix-eval" , None )
621625 # run nix-eval-jobs --flake .#checks to generate the dict of stages
622626 cmd : remotecommand .RemoteCommand = yield self .makeRemoteShellCommand ()
623627 yield self .runCommand (cmd )
624628
625629 # if the command passes extract the list of stages
626630 result = cmd .results ()
627- self .produceEvent ("finished-nix-eval" , result )
631+ self .produce_event ("finished-nix-eval" , result )
628632 if result == util .SUCCESS :
629633 # create a ShellCommand for each stage and add them to the build
630634 jobs : list [NixEvalJob ] = []
0 commit comments