Skip to content

Restore Build & Test to green - #35

Merged
demonixis merged 3 commits into
demonixis:developfrom
nburns:ci-restore-checks
Sep 23, 2026
Merged

demonixis merged 3 commits into
demonixis:developfrom
nburns:ci-restore-checks

Conversation

@nburns

@nburns nburns commented Sep 22, 2026 •

Copy link
Copy Markdown
Contributor

Build & Test has been red since 31a9062 (2026-08-14). Four problems, none caused by a code change.

  • ripgrep isn't on the macOS runners. It killed both Runtime jobs and silently disabled the Apple clients platform lint — if rg … with no rg is false, so that job passed without running the check. Installed rather than rewritten to grep, which isn't equivalent.
  • setup-android installs the obsolete tools package, which no longer resolves and fails sdkmanager.
  • The VideoToolbox encoder suite failed on x86_64. Those runners have no hardware encoder, and the software fallback holds output until the session completes. VideoEncoder::FlushPendingFrames drains 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.
  • The Home test host intermittently hung at launch on x86_64 ("the test runner hung before establishing connection"). The spindump in the failing xcresult shows the main thread blocked for the whole 300s attach window in a synchronous IconServices XPC made while constructing the launch-time "Runtime is not configured" NSAlert: iconservicesagent crash-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.

@nburns
nburns force-pushed the ci-restore-checks branch 2 times, most recently from d6fc84c to 18b9ec8 Compare September 22, 2026 19:00
@nburns nburns changed the title Restore the runtime, Android and platform-boundary CI checks Restore Build & Test to green Sep 22, 2026
@nburns
nburns force-pushed the ci-restore-checks branch 2 times, most recently from b07caf5 to 77b8fc7 Compare September 22, 2026 21:38
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.
return "\(adbMode.rawValue)|\(path)"
}

// NSAlert construction makes a synchronous IconServices XPC call; on hosts where

@nburns nburns Sep 22, 2026 •

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

reported at actions/runner-images#14773 just best to workaround here, since I doubt it will get a fix

@demonixis
demonixis merged commit b3b8f0b into demonixis:develop Sep 23, 2026
5 checks passed
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