Repository navigation
Restore Build & Test to green - #35
Merged
Merged
Conversation
nburns
force-pushed
the
ci-restore-checks
branch
2 times, most recently
from
September 22, 2026 19:00
d6fc84c to
18b9ec8
Compare
nburns
force-pushed
the
ci-restore-checks
branch
from
September 22, 2026 21:04
902fdca to
3765823
Compare
nburns
force-pushed
the
ci-restore-checks
branch
2 times, most recently
from
September 22, 2026 21:38
b07caf5 to
77b8fc7
Compare
Build & Test has been red since 31a9062 (2026-08-14); the last green run was 2026-07-18. Three problems, none caused by a code change. ripgrep is not installed on the macOS runners. The runtime jobs call rg to confirm a removed CMake option still fails configuration, so the step aborts with "rg: command not found" before anything is built. The Apple clients job has the opposite symptom from the same cause: its platform UI boundary lint reads `if rg ...; then fail; fi`, so a missing rg makes the condition false and the job passes without ever running the check. Both jobs now install it, rather than rewriting the lints to grep, which would not be behaviour-preserving: rg respects .gitignore and skips binaries, so the boundary lint would start matching build output and vendored sources. android-actions/setup-android installs a default package set including the obsolete `tools` package, which no longer resolves and fails sdkmanager. With the lint fixed the x86_64 job reaches its tests for the first time, and the VideoToolbox encoder suite fails there. That runner reports no hardware encoder at all, so VideoToolbox falls back to a software encoder that holds output until the session is completed, and the suite waits for a callback that never comes. VideoEncoder::FlushPendingFrames drains it. Frames reach VideoToolbox from a Metal command-buffer completion handler rather than synchronously, so a single VTCompressionSessionCompleteFrames can flush a pipeline the frame has not reached yet; it retries until no frame is in flight. The session stays usable and the callback drain keeps running, unlike Shutdown, which stops the drain before it flushes and so discards the callbacks it produces. The test flushes before waiting, and the suite now passes on both architectures - 2.14s on the Intel runner that previously timed out.
The x86_64 Home test step intermittently fails with "the test runner hung before establishing connection". The hang is not caused by the encoder suite: it reproduced on a tree whose only delta from a green run was comments, and again with ctest ordered after the Xcode steps so the suite never ran. On failure, upload the xcresult (which records the hung process diagnostic), crash/spin reports, and the syspolicyd/testmanagerd log window to identify what blocks app launch on the Intel runners.
The x86_64 Home test step intermittently failed with "the test runner hung before establishing connection". It was not the encoder suite: the hang reproduced on a tree whose only delta from a green run was comments, and again with ctest ordered after the Xcode steps so the suite never ran. The spindump testmanagerd takes at the attach timeout shows the app's main thread blocked for the whole 300s window constructing the launch-time "Runtime is not configured" NSAlert: decoding its nib fetches an icon through a synchronous IconServices XPC call, and iconservicesagent on the Intel runner image is crash looping (SIGABRT in Metal's MTLLoader while loading a RenderBox shader archive; the VM has no GPU), with launchd throttling its respawn. The reply only arrives if the agent is allowed to restart in time: the one green Intel run spent 240s of its 300s budget in this same call, while arm64 runners have a working agent and attach in 9s. The guidance is interactive first-launch UI for a person. Skip presenting it when the app is hosting an XCTest session, so launch never depends on IconServices and the test runner attaches immediately. Test behaviour is unchanged: no test exercises the auto-presentation.
nburns
force-pushed
the
ci-restore-checks
branch
from
September 22, 2026 22:19
736ca54 to
b3b8f0b
Compare
2 tasks done
nburns
commented
Sep 22, 2026
| return "\(adbMode.rawValue)|\(path)" | ||
| } | ||
|
|
||
| // NSAlert construction makes a synchronous IconServices XPC call; on hosts where |
Contributor
Author
There was a problem hiding this comment.
reported at actions/runner-images#14773 just best to workaround here, since I doubt it will get a fix
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 & Testhas been red since 31a9062 (2026-08-14). Four problems, none caused by a code change.if rg …with norgis false, so that job passed without running the check. Installed rather than rewritten togrep, which isn't equivalent.setup-androidinstalls the obsoletetoolspackage, which no longer resolves and fails sdkmanager.VideoEncoder::FlushPendingFramesdrains in-flight frames while keeping the session and its callbacks alive; the test flushes before waiting. 2.1s on the Intel runner that previously timed out.NSAlert:iconservicesagentcrash-loops on the GPU-less Intel image (SIGABRT in Metal's shader loader) and launchd throttles its respawn. The app now skips auto-presenting that guidance while hosting XCTest, so launch never depends on IconServices.The Home step also uploads the xcresult, crash reports, and daemon logs whenever it fails, so the next runner-image problem is diagnosable from the artifact.
No test is skipped or excluded; the streaming path is unchanged.