[Concept,01/29] buildman: Hide 'Boards not built' by default

Message ID 20260501110040.1874719-2-sjg@u-boot.org
State New
Headers
Series patman: Review-flow improvements and shared helpers |

Commit Message

Simon Glass May 1, 2026, 10:59 a.m. UTC
  From: Simon Glass <sjg@chromium.org>

When building a tools-only series, every commit shows a 'Boards not
built' line listing all selected boards, which clutters the output
without adding useful information.

Add a --show-not-built flag to control this output. The default is
now to hide the list; pass --show-not-built to see it.

Signed-off-by: Simon Glass <sjg@chromium.org>
---

 tools/buildman/builder.py       |  3 ++-
 tools/buildman/buildman.rst     |  5 +++++
 tools/buildman/cmdline.py       |  3 +++
 tools/buildman/control.py       |  3 ++-
 tools/buildman/func_test.py     |  2 +-
 tools/buildman/outcome.py       |  1 +
 tools/buildman/resulthandler.py |  3 ++-
 tools/buildman/test.py          | 12 ++++++++----
 tools/buildman/test_builder.py  |  3 ++-
 tools/buildman/worker.py        |  3 ++-
 10 files changed, 28 insertions(+), 10 deletions(-)
  

Patch

diff --git a/tools/buildman/builder.py b/tools/buildman/builder.py
index b3cc136d036..b07eb675ea9 100644
--- a/tools/buildman/builder.py
+++ b/tools/buildman/builder.py
@@ -359,7 +359,8 @@  class Builder:
         self._opts = DisplayOptions(
             show_errors=True, show_sizes=False, show_detail=False,
             show_bloat=False, show_config=False, show_environment=False,
-            show_unknown=True, ide=False, list_error_boards=False)
+            show_unknown=True, ide=False, list_error_boards=False,
+            show_not_built=False)
         self._filter_dtb_warnings = False
         self._filter_migration_warnings = False
 
diff --git a/tools/buildman/buildman.rst b/tools/buildman/buildman.rst
index 2bc0265a61d..4a6c8ee0796 100644
--- a/tools/buildman/buildman.rst
+++ b/tools/buildman/buildman.rst
@@ -1442,6 +1442,11 @@  If there are both warnings and errors, errors win, so Buildman returns 100.
 The -y option is provided (for use with -s) to ignore the bountiful device-tree
 warnings. Similarly, -Y tells Buildman to ignore the migration warnings.
 
+When some boards cannot be built (e.g. because a toolchain is missing),
+Buildman can report which boards were skipped. Use ``--show-not-built`` to
+enable this. It is off by default since it adds noise when building series
+that only affect tools or a subset of architectures.
+
 Sometimes you might get an error in a thread that is not handled by Buildman,
 perhaps due to a failure of a tool that it calls. You might see the output, but
 then Buildman hangs. Failing to handle any eventuality is a bug in Buildman and
diff --git a/tools/buildman/cmdline.py b/tools/buildman/cmdline.py
index 5396ee640fa..34e88048468 100644
--- a/tools/buildman/cmdline.py
+++ b/tools/buildman/cmdline.py
@@ -94,6 +94,9 @@  def add_upto_m(parser):
           default=False, help="Don't convert y to 1 in configs")
     parser.add_argument('-l', '--list-error-boards', action='store_true',
           default=False, help='Show a list of boards next to each error/warning')
+    parser.add_argument('--show-not-built', action='store_true',
+          default=False,
+          help='Show boards that were not built for each commit')
     parser.add_argument('-L', '--no-lto', action='store_true',
           default=False, help='Disable Link-time Optimisation (LTO) for builds')
     parser.add_argument('--list-tool-chains', action='store_true', default=False,
diff --git a/tools/buildman/control.py b/tools/buildman/control.py
index bb866910491..87b7ffa09d8 100644
--- a/tools/buildman/control.py
+++ b/tools/buildman/control.py
@@ -1108,7 +1108,8 @@  def do_buildman(args, toolchains=None, make_func=None, brds=None,
         show_environment=args.show_environment,
         show_unknown=args.show_unknown,
         ide=args.ide,
-        list_error_boards=args.list_error_boards)
+        list_error_boards=args.list_error_boards,
+        show_not_built=args.show_not_built)
     result_handler = ResultHandler(col, display_options)
 
     # Create a new builder with the selected args
diff --git a/tools/buildman/func_test.py b/tools/buildman/func_test.py
index 90c4974960e..98b2a899e28 100644
--- a/tools/buildman/func_test.py
+++ b/tools/buildman/func_test.py
@@ -706,7 +706,7 @@  Idx Name          Size      VMA       LMA       File off  Algn
         # Now show summary - should report boards not built
         terminal.get_print_test_lines()  # Clear
         self._run_control('-b', TEST_BRANCH, '-o', self._output_dir, '-s',
-                         clean_dir=False)
+                         '--show-not-built', clean_dir=False)
         lines = terminal.get_print_test_lines()
         text = '\n'.join(line.text for line in lines)
 
diff --git a/tools/buildman/outcome.py b/tools/buildman/outcome.py
index 18c97e523a0..42a9f1f196b 100644
--- a/tools/buildman/outcome.py
+++ b/tools/buildman/outcome.py
@@ -27,6 +27,7 @@  DisplayOptions = namedtuple('DisplayOptions', [
     'show_unknown',     # Show unknown boards in summary
     'ide',              # IDE mode - output to stderr
     'list_error_boards', # Include board list with error lines
+    'show_not_built',   # Show boards that were not built
 ])
 
 # Error line information for display
diff --git a/tools/buildman/resulthandler.py b/tools/buildman/resulthandler.py
index fca8e7d6ba1..85f0112e765 100644
--- a/tools/buildman/resulthandler.py
+++ b/tools/buildman/resulthandler.py
@@ -174,7 +174,8 @@  class ResultHandler:
         self._base_config = config
         self._base_environment = environment
 
-        self._show_not_built(board_selected, board_dict)
+        if self._opts.show_not_built:
+            self._show_not_built(board_selected, board_dict)
 
     def _get_error_lines(self):
         """Get the number of error lines output
diff --git a/tools/buildman/test.py b/tools/buildman/test.py
index 998f2227281..74a39c9556d 100644
--- a/tools/buildman/test.py
+++ b/tools/buildman/test.py
@@ -200,7 +200,8 @@  class TestBuildBase(unittest.TestCase):
         self._opts = DisplayOptions(
             show_errors=False, show_sizes=False, show_detail=False,
             show_bloat=False, show_config=False, show_environment=False,
-            show_unknown=False, ide=False, list_error_boards=False)
+            show_unknown=False, ide=False, list_error_boards=False,
+            show_not_built=False)
         self._result_handler = ResultHandler(self._col, self._opts)
 
         self.base_dir = tempfile.mkdtemp()
@@ -272,7 +273,8 @@  class TestBuildOutput(TestBuildBase):
         opts = DisplayOptions(
             show_errors=show_errors, show_sizes=False, show_detail=False,
             show_bloat=False, show_config=False, show_environment=False,
-            show_unknown=False, ide=False, list_error_boards=list_error_boards)
+            show_unknown=False, ide=False, list_error_boards=list_error_boards,
+            show_not_built=False)
         build = builder.Builder(self.toolchains, self.base_dir, None, threads,
                                 2, self._col, ResultHandler(self._col, opts),
                                 checkout=False)
@@ -1233,7 +1235,8 @@  class TestBuildSummary(TestBuildBase):
         opts = DisplayOptions(
             show_errors=False, show_sizes=False, show_detail=False,
             show_bloat=False, show_config=False, show_environment=False,
-            show_unknown=False, ide=False, list_error_boards=False)
+            show_unknown=False, ide=False, list_error_boards=False,
+            show_not_built=False)
         build = builder.Builder(self.toolchains, self.base_dir, None, 1,
                                 2, self._col, ResultHandler(self._col, opts),
                                 checkout=False)
@@ -1288,7 +1291,8 @@  class TestBuildSummary(TestBuildBase):
         opts = DisplayOptions(
             show_errors=False, show_sizes=False, show_detail=False,
             show_bloat=False, show_config=False, show_environment=False,
-            show_unknown=False, ide=False, list_error_boards=False)
+            show_unknown=False, ide=False, list_error_boards=False,
+            show_not_built=False)
         build = builder.Builder(self.toolchains, self.base_dir, None, 1,
                                 2, self._col, ResultHandler(self._col, opts),
                                 checkout=False)
diff --git a/tools/buildman/test_builder.py b/tools/buildman/test_builder.py
index 74f19ec9528..282d446b1ec 100644
--- a/tools/buildman/test_builder.py
+++ b/tools/buildman/test_builder.py
@@ -24,7 +24,8 @@  from u_boot_pylib import terminal
 DEFAULT_OPTS = DisplayOptions(
     show_errors=False, show_sizes=False, show_detail=False,
     show_bloat=False, show_config=False, show_environment=False,
-    show_unknown=False, ide=False, list_error_boards=False)
+    show_unknown=False, ide=False, list_error_boards=False,
+    show_not_built=False)
 
 
 class TestPrintFuncSizeDetail(unittest.TestCase):
diff --git a/tools/buildman/worker.py b/tools/buildman/worker.py
index ddf023a1979..c0d561f877e 100644
--- a/tools/buildman/worker.py
+++ b/tools/buildman/worker.py
@@ -658,7 +658,8 @@  def _create_builder(state, num_threads, num_jobs):
     opts = DisplayOptions(
         show_errors=False, show_sizes=False, show_detail=False,
         show_bloat=False, show_config=False, show_environment=False,
-        show_unknown=False, ide=True, list_error_boards=False)
+        show_unknown=False, ide=True, list_error_boards=False,
+        show_not_built=False)
     result_handler = ResultHandler(col, opts)
 
     bldr = builder_mod.Builder(