ci(shorebird): stream child stdout/stderr from shard_runner#144
Merged
eseidel merged 2 commits intoshorebird/devfrom May 8, 2026
Merged
ci(shorebird): stream child stdout/stderr from shard_runner#144eseidel merged 2 commits intoshorebird/devfrom
eseidel merged 2 commits intoshorebird/devfrom
Conversation
`runChecked` used `Process.run`, which buffers stdout/stderr in memory and prints nothing until the process exits — and on success, prints nothing at all. That hid 30+ minutes of ninja, cargo, and gclient output per shard from the GitHub Actions log; only the [Step] start / [Step] complete prints from the runner itself made it through. The legacy bash build scripts streamed naturally, so this is a regression the sharded runner introduced. Switch `runChecked` to `Process.start` with inheritStdio so output goes live to the parent's stdio. The error path no longer needs to echo captured output (it already streamed) — the exception just notes the exit code and description. Add `runCapturingStdout` for the one place that actually parses child output (`gsutil ls` in lib/gcs.dart). It captures stdout while still streaming stderr, so failures still appear in the log live. Tests: 32/32 pass; dart analyze clean.
bdero
approved these changes
May 8, 2026
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.
Summary
runCheckedusedProcess.run, which buffers stdout/stderr in memoryand only emits anything on a non-zero exit — and on success, nothing at
all. The result: 30+ minutes of
ninja,cargo, andgclientoutputper shard never reached the GitHub Actions log. Only the runner's own
[Step] starting/[Step] completeprints made it through, so ahealthy shard looked like a frozen one.
The legacy
mac_build.sh/linux_build.shscripts streamed naturally(plain bash invocations of
\$NINJA -C ...), so this was a regressionthe sharded runner introduced.
Change
runCheckednow usesProcess.startwithProcessStartMode.inheritStdio,so child stdout/stderr go live to the parent's stdio (and thus the CI
log). On failure the exception just notes the exit code — captured
output is no longer included because it already streamed.
runCapturingStdoutfor the one place that actually parses childoutput (
gsutil lsinlib/gcs.dart). It captures stdout whilestill streaming stderr.
lib/gcs.dartupdated to use it.Test plan
dart analyzecleandart test(32/32 pass)_build_engine; verify ninja[N/M]progress lines and cargo per-target output appear live in the
GHA log