Skip to content

feat(dashboard): replace the build step table with one log stream - #7689

Open
ogzhanolguncu wants to merge 7 commits into
feat/build-step-event-linesfrom
feat/dashboard-build-logs-flat
Open

ogzhanolguncu wants to merge 7 commits into
feat/build-step-event-linesfrom
feat/dashboard-build-logs-flat

Conversation

@ogzhanolguncu

@ogzhanolguncu ogzhanolguncu commented Oct 1, 2026 •

Copy link
Copy Markdown
Collaborator

build logs are flat style stream now instead of a step table

Fix

  • one stream through deployments.listBuildLogs, step header when the step changes
  • stderr amber, ERROR: red, Jump to error and Jump to latest
  • follows the tail while building, long steps fold, loads lazily
  • strips ANSI codes and handles \r progress lines
  • removes the step table, its tRPC route and ClickHouse query

Deploy order

  1. API from feat(api): add deployments.listBuildLogs #7681
  2. dashboard

Design Check

@dave-hawkins could you take a look and make changes to improve UI?

@ogzhanolguncu
ogzhanolguncu added this pull request to stack #7683 October 1, 2026 18:53
@vercel

vercel Bot commented Oct 1, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
dashboard Ready Ready Preview Oct 2, 2026 3:18pm UTC
design Ready Ready Preview Oct 2, 2026 3:18pm UTC

Request Review

@ogzhanolguncu
ogzhanolguncu marked this pull request as ready for review October 1, 2026 19:42
@ogzhanolguncu
ogzhanolguncu force-pushed the feat/dashboard-build-logs-flat branch from c5521c2 to 9b72764 Compare October 2, 2026 11:41
@ogzhanolguncu
ogzhanolguncu force-pushed the feat/dashboard-build-logs-flat branch from 9b72764 to 943d292 Compare October 2, 2026 13:34
ogzhanolguncu and others added 6 commits October 2, 2026 18:11
tldr: build logs are one list now, Vercel style, read through
getBuildLogs. The step table, its tRPC route and its ClickHouse
query are gone.

  > [builder 7/10] RUN go build    <- header when stepId changes
  12:00:01.120  added 312 packages
  12:00:06.410  ✓ DONE 5.3s
  > [builder 8/10] RUN npm test
  12:00:06.500  npm warn ...       <- stderr, amber
  12:00:07.010  ERROR: exit 1      <- red, Jump to error target

- Lazy: pages load about 300 lines ahead of the viewport.
- A finished run of more than 40 entries folds to its first and last
  5 behind "Show N more entries". Runs with an error and the last run
  stay open.
- Jump to latest and Jump to error read every remaining page in one
  fetch behind a button spinner, then scroll once. A failed build and
  a build that is still running read to the end the same way. Pages
  ask for 500 entries.
- A long read publishes what it has every 250ms, so slow pages show
  progress without a render per page.
- A running build follows the tail. Only an upward scroll stops it,
  because rows grow below the viewport when they are measured. A
  finished build opens at the top.
- Polling backs off on a quiet build: 1s, then 2s after an empty poll.
- Loading keeps the final frame (toolbar and list height) with a
  spinner, so nothing jumps. "Loading more" sits at the end while
  more pages exist.
- The build card opens on its own once the steps show a fresh build.
- Rows show the output as a terminal would: ANSI codes are stripped,
  a carriage return redraws its line, and a chunk that continues an
  unfinished line of the same step and stream joins it. ctrl's
  CACHED / DONE / ERROR lines never join. The API keeps the raw text.
- The list uses @tanstack/react-virtual directly. VirtualTable has
  fixed row heights and no scroll to index. Rows render a plain
  <time>, not TimestampInfo.

The cursor only moves forward, so reaching the end still reads every
page. That is about 4 requests for a 2000 entry build.

- build-steps-table/, use-build-steps.ts
- tRPC deploy.deployment.buildSteps
- @unkey/clickhouse buildSteps.getSteps (build-steps.ts)
- the failed build screenshot in build-logs.mdx, it showed the table
- StreamingTable onRowClick and renderExpanded, only the table used them
- the error-blink animation in theme.css, only the table used it

While a build runs, the build status says "Building..." instead of
the current step name, which came from the step table query.

The dashboard now needs deployments.getBuildLogs, so the API from
PR 3 ships first.
- the auto jump to the last ERROR: line resolved before the first page
  loaded, so a failed build opened at the top. It now waits until the
  logs are caught up, and repeats the jump while rows get measured
  until the viewer scrolls
- a running build shows a "Running" row with a pulsing dot at the end,
  so a quiet step still looks alive
- build-log-lines: one tone for ctrl's CACHED / DONE / ERROR lines,
  match for the tone, text computed once per row. Event rows are styled
  from the tone, so a stdout line that starts with "DONE " no longer
  gets the check icon
… jumps

- Header: copy button whose label names the selected lines, error and
  warning counters joined to a find field, prev/next/clear controls, and
  an icon-only scroll to latest that scrolls smoothly
- Rows: warnings get an amber row, stderr renders as plain text, lines
  starting with Error: are errors, links are clickable, step names show as
  bold lines aligned with the timestamps
- Search filters to matching lines under their step names and highlights
  matches; Cmd/Ctrl+F focuses it only while the logs are open
- Log height is capped at 60dvh for short screens
- Header decisions move into a pure, tested resolver; rows and counters
  match exhaustively with @unkey/match
- Failed steps use the circle-xmark icon, matching the error counter
- Add IconDoubleChevronDownOutline12
@ogzhanolguncu
ogzhanolguncu force-pushed the feat/dashboard-build-logs-flat branch from 943d292 to 1f9aac7 Compare October 2, 2026 15:11

This branch was successfully deployed

2 active deployments
Preview – dashboard — 6eb1df17 Deployed Oct 2, 2026 by vercel[bot]
Preview – design — 6eb1df17 Deployed Oct 2, 2026 by vercel[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants