@@ -285,7 +285,7 @@ def _do_test_builds(args, test_image_suffix, end_time, version_tag):
285285 build_types .append (BUILD_TYPES ['fuzzing' ])
286286
287287 build_ids = collections .defaultdict (list )
288- skipped_projects = []
288+ skipped_projects = collections . defaultdict ( list )
289289 failed_to_start_builds = []
290290 credentials = oauth2client .client .GoogleCredentials .get_application_default ()
291291
@@ -302,8 +302,8 @@ def _do_test_builds(args, test_image_suffix, end_time, version_tag):
302302 if not args .force_build :
303303 unselected_projects = set (specified_projects ) - set (projects_to_build )
304304 for project in unselected_projects :
305- skipped_projects .append (
306- (project , f' { build_type . type_name } : Production build succeeded' ))
305+ skipped_projects [ build_type . type_name ] .append (
306+ (project , ' Production build succeeded' ))
307307
308308 logging .info ('Build type: %s' , build_type .type_name )
309309 logging .info (
@@ -327,7 +327,8 @@ def _do_test_builds(args, test_image_suffix, end_time, version_tag):
327327 build_type = build_type .type_name )
328328 project_builds , new_skipped , new_failed_to_start = _do_build_type_builds (
329329 args , config , credentials , build_type , projects_to_build )
330- skipped_projects .extend (new_skipped )
330+ for project , reason in new_skipped :
331+ skipped_projects [build_type .type_name ].append ((project , reason ))
331332 failed_to_start_builds .extend (new_failed_to_start )
332333 for project , project_build_id in project_builds .items ():
333334 build_ids [project ].append (project_build_id )
@@ -336,13 +337,17 @@ def _do_test_builds(args, test_image_suffix, end_time, version_tag):
336337 if skipped_projects :
337338 logging .info (
338339 '================================================================' )
339- logging .info (' PHASE 2: SKIPPED PROJECTS ' )
340+ logging .info (' PHASE 2: SKIPPED BUILDS ' )
340341 logging .info (
341342 '================================================================' )
342- logging .info ('Total projects skipped: %d' , len (skipped_projects ))
343- logging .info ('--- SKIPPED PROJECTS ---' )
344- for project , reason in sorted (skipped_projects ):
345- logging .info (' - %s: %s' , project , reason )
343+ total_skipped_builds = sum (
344+ len (skips ) for skips in skipped_projects .values ())
345+ logging .info ('Total skipped builds: %d' , total_skipped_builds )
346+ logging .info ('--- SKIPPED BUILDS ---' )
347+ for build_type_name , skips in sorted (skipped_projects .items ()):
348+ logging .info (' - %s:' , build_type_name )
349+ for project , reason in sorted (skips ):
350+ logging .info (' - %s: %s' , project , reason )
346351 logging .info ('-----------------------' )
347352
348353 logging .info (
@@ -525,46 +530,42 @@ def wait_on_builds(build_ids, credentials, cloud_project, end_time,
525530 time .sleep (1 ) # Avoid rate limiting.
526531
527532 # Final Report
528- total_projects = (len (successful_builds ) + len (failed_builds ) +
529- len (skipped_projects ))
530- all_projects_in_build = (list (successful_builds .keys ()) +
531- list (failed_builds .keys ()) +
532- [name for name , reason in skipped_projects ])
533+ successful_builds_count = sum (
534+ len (builds ) for builds in successful_builds .values ())
535+ failed_builds_count = sum (len (builds ) for builds in failed_builds .values ())
536+ skipped_builds_count = sum (
537+ len (skips ) for skips in skipped_projects .values ())
538+
539+ # Note: To get all unique project names, we create a set from the keys of
540+ # successful_builds, failed_builds, and the project names in skipped_projects.
541+ all_projects_in_build = set (successful_builds .keys ()) | set (
542+ failed_builds .keys ()) | set (p for sl in skipped_projects .values ()
543+ for p , r in sl )
544+ total_projects = len (all_projects_in_build )
545+
533546 results = {
534- 'total ' : total_projects ,
535- 'successful ' : len ( successful_builds ) ,
536- 'failed ' : len ( failed_builds ) ,
537- 'skipped ' : len ( skipped_projects ) ,
547+ 'total_projects_analyzed ' : total_projects ,
548+ 'successful_builds ' : successful_builds_count ,
549+ 'failed_builds ' : failed_builds_count ,
550+ 'skipped_builds ' : skipped_builds_count ,
538551 'failed_projects' : sorted (list (failed_builds .keys ())),
539- 'skipped_projects' : sorted ([name for name , reason in skipped_projects ]),
540- 'all_projects' : sorted (all_projects_in_build ),
552+ 'skipped_projects' :
553+ sorted (
554+ list (set (p for sl in skipped_projects .values () for p , r in sl ))),
555+ 'all_projects' : sorted (list (all_projects_in_build )),
541556 }
542557 with open (f'{ version_tag } -results.json' , 'w' ) as f :
543558 json .dump (results , f )
544559
545560 summary_title = f'BUILD REPORT: { version_tag .upper ()} '
546561 summary_lines = [
547562 f"Total projects analyzed: { total_projects } " ,
548- f"[PASSED] Successful builds: { len ( successful_builds ) } " ,
549- f"[FAILED] Failed builds: { len ( failed_builds ) } " ,
550- f"[SKIPPED] Skipped projects : { len ( skipped_projects ) } " ,
563+ f"[PASSED] Successful builds: { successful_builds_count } " ,
564+ f"[FAILED] Failed builds: { failed_builds_count } " ,
565+ f"[SKIPPED] Skipped builds : { skipped_builds_count } " ,
551566 ]
552567 _print_summary_box (summary_title , summary_lines )
553568
554- if skipped_projects :
555- logging .info ('--- SKIPPED PROJECTS ---' )
556- # Group skipped projects by reason
557- grouped_skipped = {}
558- for project , reason in skipped_projects :
559- if reason not in grouped_skipped :
560- grouped_skipped [reason ] = []
561- grouped_skipped [reason ].append (project )
562-
563- for reason , projects in sorted (grouped_skipped .items ()):
564- logging .info (' - %s:' , reason )
565- for project in sorted (projects ):
566- logging .info (' - %s' , project )
567-
568569 if failed_builds :
569570 logging .error ('--- FAILED BUILDS ---' )
570571 for project , failures in sorted (failed_builds .items ()):
@@ -577,7 +578,7 @@ def wait_on_builds(build_ids, credentials, cloud_project, end_time,
577578 logging .info ('-----------------------' )
578579 return False
579580
580- if not finished_builds_count and not skipped_projects :
581+ if not finished_builds_count and not skipped_builds_count :
581582 logging .warning ('No builds were run.' )
582583 return False
583584
0 commit comments