Originally created by: AbhishekBarali
Closes the factual error reported in [#19], and proves an Intel macOS build in CI.
The README said GitHub had retired its Intel build machines, so there was "no way
to produce and test" an Intel build. That was false. GitHub retired macos-13 on
2025-12-04 but replaced it with macos-15-intel, available until August 2027
(actions/runner-images#13045). The same mistaken premise had spread into three
workflow files. All corrected, credited to @hellosimplerick.
Metal is off on Intel. ggml's Metal backend targets Apple Silicon, and
upstream whisper.cpp/llama.cpp carry open reports of it producing corrupted output
on Intel Macs with AMD GPUs. The macOS dependency table applied to both
architectures, so Intel was silently inheriting Metal. It is now split by arch and
Intel builds CPU only. Verified per target with cargo tree:
| target | transcribe-cpp | transcribe-rs |
|---|---|---|
| aarch64-apple-darwin | metal |
whisper-cpp, whisper-metal, onnx |
| x86_64-apple-darwin | none, CPU only | whisper-cpp, onnx |
| x86_64-pc-windows-msvc | dynamic-backends, vulkan |
unchanged |
| x86_64-unknown-linux-gnu | dynamic-backends, vulkan |
unchanged |
Apple Silicon, Windows and Linux resolve identically to before. Note that
cargo metadata cannot verify this, as it reports the union across all platforms;
only cargo tree --target is per-target.
ONNX Runtime is bundled. pykeio's ort dropped prebuilt
x86_64-apple-darwin binaries, so there is no static ORT to embed there. It also
cannot simply be dropped: ort backs vad-rs (Silero VAD, used by every
recording) as well as transcribe-rs (Parakeet). A Homebrew dylib's install name
is an absolute Cellar path, so linking straight against it produces an app that
only starts on a machine with that formula installed.
CI copies the dylib into src-tauri/onnx-libs/, rewrites its install name to
@rpath before linking, and bundle.macOS.frameworks ships it in
Contents/Frameworks. build.rs emits the matching
@executable_path/../Frameworks rpath. Rewriting pre-link avoids post-bundle
surgery on the .app, which would leave the generated .dmg stale.
Test Build 30976522069
produced SpeakoFlow_1.1.0_x64.dmg and passed all four audit gates:
file -> Mach-O 64-bit executable x86_64
otool -L -> @rpath/libonnxruntime.dylib (1.28.0), no Homebrew path
LC_RPATH -> @executable_path/../Frameworks
smoke -> transcribe.cpp compute devices: 1
The smoke test is the meaningful one: it ran on a native Intel runner, and dyld
resolves every linked dylib before main(), so the bundled ONNX Runtime genuinely
loaded from inside the app.
Intel is added to test-build.yml and not to either release matrix. It stays
out until a tester confirms it runs on real Intel hardware, since no maintainer
has an Intel Mac.
There is also a hard constraint worth recording: Homebrew now publishes an Intel
onnxruntime bottle only for Sonoma, and the bundled dylib reports minos 14.0,
while the app binary itself is minos 10.15. So this build requires macOS 14 or
newer, which excludes Intel Macs that cannot reach Sonoma. Lowering that floor
means building ONNX Runtime from source with a lower deployment target. The audit
step prints both minimums and the available bottle tags on every run, so the
constraint is visible rather than assumed.
macos-15-intel itself retires in August 2027.
Investigated and implemented with an AI coding assistant. The runner facts were
verified against GitHub's changelog and actions/runner-images#13045 rather than
taken from the issue, and the Metal and ort constraints were confirmed against
upstream release notes and issues.
Originally posted by: coderabbitai[bot]
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.
❤️ Share
- [X](https://twitter.com/intent/tweet?text=I%20just%20used%20%40coderabbitai%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20the%20proprietary%20code.%20Check%20it%20out%3A&url=https%3A//coderabbit.ai) - [Mastodon](https://mastodon.social/share?text=I%20just%20used%20%40coderabbitai%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20the%20proprietary%20code.%20Check%20it%20out%3A%20https%3A%2F%2Fcoderabbit.ai) - [Reddit](https://www.reddit.com/submit?title=Great%20tool%20for%20code%20review%20-%20CodeRabbit&text=I%20just%20used%20CodeRabbit%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20proprietary%20code.%20Check%20it%20out%3A%20https%3A//coderabbit.ai) - [LinkedIn](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fcoderabbit.ai&mini=true&title=Great%20tool%20for%20code%20review%20-%20CodeRabbit&summary=I%20just%20used%20CodeRabbit%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20proprietary%20code)Comment
@coderabbitai helpto get the list of available commands.Related
Commit: [0a72cc]
Ticket changed by: AbhishekBarali