@@ -262,18 +262,20 @@ def list_project_runners() -> list[dict]:
262262 # Project-scoped listing might be restricted for JOB-TOKEN in some instances.
263263 # Return what we have (likely nothing) and let caller decide.
264264 if status == 403 :
265- sys .stderr .write (f "\n [ERROR] 403 Forbidden when listing project runners\n " )
265+ sys .stderr .write ("\n [ERROR] 403 Forbidden when listing project runners\n " )
266266 sys .stderr .write (f" Project ID: { project_id } \n " )
267267 sys .stderr .write (f" Authentication: { key if key else 'None' } \n " )
268- sys .stderr .write (f" Endpoint: projects/{ project_id } /runners\n \n " )
269- sys .stderr .write (f"Required permissions:\n " )
270- sys .stderr .write (f" - Token scope: 'api' (you likely have this)\n " )
271- sys .stderr .write (f" - Project role: Maintainer or Owner (you may be missing this)\n \n " )
272- sys .stderr .write (f"Solutions:\n " )
273- sys .stderr .write (f" 1. Ensure the token owner has Maintainer/Owner role on project { project_id } \n " )
274- sys .stderr .write (f" 2. Use a Group Access Token if available (has higher privileges)\n " )
275- sys .stderr .write (f" 3. Set environment variable: ASSUME_TAGGED_GROUPS_MISSING=0\n " )
276- sys .stderr .write (f" (This will skip runner enumeration and schedule all groups)\n \n " )
268+ sys .stderr .write (" Endpoint: projects/{project_id}/runners\n \n " )
269+
270+ sys .stderr .write ("Required permissions:\n " )
271+ sys .stderr .write (" - Token scope: 'api' (you likely have this)\n " )
272+ sys .stderr .write (" - Project role: Maintainer or Owner (you may be missing this)\n \n " )
273+
274+ sys .stderr .write ("Solutions:\n " )
275+ sys .stderr .write (" 1. Ensure the token owner has Maintainer/Owner role on project {project_id}\n " )
276+ sys .stderr .write (" 2. Use a Group Access Token if available (has higher privileges)\n " )
277+ sys .stderr .write (" 3. Set environment variable: ASSUME_TAGGED_GROUPS_MISSING=0\n " )
278+ sys .stderr .write (" (This will skip runner enumeration and schedule all groups)\n \n " )
277279 break
278280 runners .extend (x for x in obj if isinstance (x , dict ))
279281 if len (obj ) < per_page :
@@ -417,7 +419,7 @@ def main():
417419 # Track skipped groups for reporting
418420 skipped_groups : list [dict ] = []
419421
420- print (f "\n === Test Group Scheduling ===" )
422+ print ("\n === Test Group Scheduling ===" )
421423 for (chip , tagset , test_type ), test_dirs in group_map .items ():
422424 tag_list = sorted (tagset )
423425 # Build name suffix excluding the SOC itself to avoid duplication
@@ -430,9 +432,9 @@ def main():
430432 print (f" Required tags: { ', ' .join (tag_list )} " )
431433 print (f" Tests: { len (test_dirs )} " )
432434 if can_schedule :
433- print (f " ✓ Runner found - scheduling" )
435+ print (" ✓ Runner found - scheduling" )
434436 else :
435- print (f " ✗ NO RUNNER FOUND - skipping" )
437+ print (" ✗ NO RUNNER FOUND - skipping" )
436438
437439 if can_schedule :
438440 job_name = f"hw-{ chip } -{ test_type } -{ tag_suffix } " [:255 ]
@@ -462,11 +464,11 @@ def main():
462464 )
463465
464466 # Print summary
465- print (f "\n === Summary ===" )
467+ print ("\n === Summary ===" )
466468 print (f" Scheduled groups: { len (jobs_entries )} " )
467469 print (f" Skipped groups (no runner): { len (skipped_groups )} " )
468470 if skipped_groups :
469- print (f "\n Skipped group details:" )
471+ print ("\n Skipped group details:" )
470472 for sg in skipped_groups :
471473 chip = sg .get ("chip" )
472474 test_type = sg .get ("test_type" )
0 commit comments