feat(dashboard): replace the build step table with one log stream - #7689
Open
ogzhanolguncu wants to merge 7 commits into
Open
ogzhanolguncu wants to merge 7 commits into
ogzhanolguncu wants to merge 7 commits into
Conversation
ogzhanolguncu
added this pull request to stack #7683
October 1, 2026 18:53
ogzhanolguncu
marked this pull request as ready for review
October 1, 2026 19:42
ogzhanolguncu
force-pushed
the
feat/dashboard-build-logs-flat
branch
from
October 2, 2026 11:41
c5521c2 to
9b72764
Compare
ogzhanolguncu
force-pushed
the
feat/dashboard-build-logs-flat
branch
from
October 2, 2026 13:34
9b72764 to
943d292
Compare
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
force-pushed
the
feat/dashboard-build-logs-flat
branch
from
October 2, 2026 15:11
943d292 to
1f9aac7
Compare
This branch was successfully deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
build logs are flat style stream now instead of a step table
Fix
deployments.listBuildLogs, step header when the step changesERROR:red, Jump to error and Jump to latest\rprogress linesDeploy order
Design Check
@dave-hawkins could you take a look and make changes to improve UI?