From 9901b3c1568279eace815d5f0a9927aea5013534 Mon Sep 17 00:00:00 2001 From: Ramon Roche Date: Thu, 12 Mar 2026 10:52:30 -0700 Subject: [PATCH] ci(boards): filter companion targets from CI build groups Read companion_targets files from board directories and exclude those targets from CI grouped builds. The parent target builds them via Make prerequisite, avoiding redundant CI jobs. Signed-off-by: Ramon Roche --- Tools/ci/generate_board_targets_json.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/Tools/ci/generate_board_targets_json.py b/Tools/ci/generate_board_targets_json.py index 7931bacd8a..66fe49b329 100755 --- a/Tools/ci/generate_board_targets_json.py +++ b/Tools/ci/generate_board_targets_json.py @@ -189,6 +189,24 @@ for manufacturer in sorted(os.scandir(os.path.join(source_dir, '../boards')), ke if target is not None: build_configs.append(target) +# Remove companion targets from CI groups (parent target builds them via Make prerequisite) +for manufacturer in sorted(os.scandir(os.path.join(source_dir, '../boards')), key=lambda e: e.name): + if not manufacturer.is_dir(): + continue + for board in sorted(os.scandir(manufacturer.path), key=lambda e: e.name): + if not board.is_dir(): + continue + companion_file = os.path.join(board.path, 'companion_targets') + if os.path.exists(companion_file): + with open(companion_file) as f: + companions = {l.strip() for l in f if l.strip() and not l.startswith('#')} + for arch in grouped_targets: + for man in grouped_targets[arch]['manufacturers']: + grouped_targets[arch]['manufacturers'][man] = [ + t for t in grouped_targets[arch]['manufacturers'][man] + if t not in companions + ] + if(verbose): import pprint print("============================")