Sort recent builds by build number

This CL makes Pinpoint CL displaying recent builds in the same order as the web UI.

Bug: b/465065368
Change-Id: I3753beb536471165ba4ef4c65fccfa51a27f366c
Reviewed-on: https://chromium-review.googlesource.com/c/crossbench/+/7228505
Commit-Queue: Maxim Sheshukov <maximsheshukov@google.com>
Reviewed-by: Patrick Thier <pthier@chromium.org>
diff --git a/crossbench/pinpoint/list_builds.py b/crossbench/pinpoint/list_builds.py
index 1c136b6..34cf2e5 100644
--- a/crossbench/pinpoint/list_builds.py
+++ b/crossbench/pinpoint/list_builds.py
@@ -27,6 +27,7 @@
       "%Y-%m-%d %H:%M:%S".
   """
   commit: str
+  number: int
   date: str
 
 
@@ -51,6 +52,7 @@
     if build.get("status") != "SUCCESS":
       continue
 
+    number = build.get("number", 0)
     commit = build.get("input", {}).get("gitilesCommit", {}).get("id")
     if not commit:
       continue
@@ -64,13 +66,14 @@
       logging.warning("Invalid date format: %s", end_time)
       continue
 
-    builds.append(Build(commit, date))
+    builds.append(Build(commit=commit, number=number, date=date))
 
-  builds.sort(key=lambda build: build.date, reverse=True)
+  builds.sort(key=lambda build: build.number, reverse=True)
   return builds
 
 
 def _display_builds(builds: list[Build]) -> None:
-  headers = ["Commit", "Date"]
-  table_data = [[build.commit, format_time(build.date)] for build in builds]
-  print(tabulate(table_data, headers=headers))
+  headers = ["Commit", "Number", "Date"]
+  table_data = [[build.commit, build.number,
+                 format_time(build.date)] for build in builds]
+  print(tabulate(table_data, headers=headers, numalign="left"))
diff --git a/tests/crossbench/pinpoint/test_config.py b/tests/crossbench/pinpoint/test_config.py
index e8d709b..efb5c20 100644
--- a/tests/crossbench/pinpoint/test_config.py
+++ b/tests/crossbench/pinpoint/test_config.py
@@ -29,7 +29,7 @@
     self.mock_fetch_builds = self.enterContext(
         mock.patch("crossbench.pinpoint.config.fetch_builds"))
     self.mock_fetch_builds.return_value = [
-        Build(commit=_TEST_RECENT_COMMIT, date="2025-11-01 00:00:00"),
+        Build(commit=_TEST_RECENT_COMMIT, number=1, date="2025-11-01 00:00:00"),
     ]
 
   def test_parse_variant(self):
@@ -153,7 +153,7 @@
     self.mock_fetch_builds = self.enterContext(
         mock.patch("crossbench.pinpoint.config.fetch_builds"))
     self.mock_fetch_builds.return_value = [
-        Build(commit=_TEST_RECENT_COMMIT, date="2025-11-02 00:00:00"),
+        Build(commit=_TEST_RECENT_COMMIT, number=1, date="2025-11-02 00:00:00"),
     ]
     self.mock_show_warnings = self.enterContext(
         mock.patch("crossbench.pinpoint.config.show_warnings"))
diff --git a/tests/crossbench/pinpoint/test_list_builds.py b/tests/crossbench/pinpoint/test_list_builds.py
index 362ccaa..f3319cb 100644
--- a/tests/crossbench/pinpoint/test_list_builds.py
+++ b/tests/crossbench/pinpoint/test_list_builds.py
@@ -35,6 +35,7 @@
                     }
                 },
                 "endTime": F"2025-11-1{i}T00:00:00Z",
+                "number": i,
                 "status": "SUCCESS"
             } for i in range(3)]
         }
@@ -49,9 +50,9 @@
   def test_fetch_builds_contain_correct_builds(self):
     builds = fetch_builds("test-bot")
     self.assertEqual(builds, [
-        Build(commit="commit2", date="2025-11-12 00:00:00"),
-        Build(commit="commit1", date="2025-11-11 00:00:00"),
-        Build(commit="commit0", date="2025-11-10 00:00:00"),
+        Build(commit="commit2", number=2, date="2025-11-12 00:00:00"),
+        Build(commit="commit1", number=1, date="2025-11-11 00:00:00"),
+        Build(commit="commit0", number=0, date="2025-11-10 00:00:00"),
     ])
 
   def test_list_builds_prints_correct_commit_hashes(self):