Repository navigation
ci: lint and test on macOS - #2151
Merged
Benoît Cortier (CBenoit) merged 11 commits intoOct 25, 2026
Merged
Conversation
The Agent and shared crates carry macOS-specific code, but CI only compiled jetsocat for macOS, so that code was never type-checked or tested there. Add a macos-15 (arm64) leg to the clippy and test jobs. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Contributor
There was a problem hiding this comment.
🟡 Changes recommended
Rust shim repairs should precede cache initialization in both macOS jobs so broken shims do not prevent dependency caching.
1 open issue
What changed in this PR
This PR extends CI coverage to macOS so platform-specific code in the Agent and shared crates is linted and tested, rather than only compiling jetsocat.
Changes:
- Add a
macos-15leg to Clippy and workspace tests. - Configure tests for
aarch64-apple-darwinwhile preserving Windows and Linux coverage. - Add macOS Rust shim repair steps before linting and testing.
| File | Description |
|---|---|
.github/workflows/ci.yml |
Adds macOS lint/test matrix entries and Rust shim repairs. |
Review effort: Balanced
The cache action runs rustc before restoring, so a broken shim left the macOS legs uncached. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The cache action runs rustc before restoring, so a broken shim left the jetsocat macOS builds uncached. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The hook is Windows-only, but its dependencies were unconditional, and retour fails to compile on aarch64, so the workspace did not build on Apple Silicon. Also stop a failing lints or tests leg from cancelling the other platforms. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
On macOS runners, forking sleep for every line left the lines still in the pipe after the last write unread when the 5 s exit grace period ran out. Reading slowly is only needed while the first frame backs up the second, so read the rest at full speed. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Without DGATEWAY_WEBAPP_PATH or a static root path in the WebApp section, the configuration failed to load on macOS even with the web app disabled. Default to a webapp folder under the macOS configuration directory, as Linux does under /usr/share. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The network scanner's connect future treated only Linux's EINPROGRESS as a pending connection, so on macOS it returned Pending without registering for readiness and never completed. Once it registers, kqueue cannot report a failed connection, which the future expected, so read the pending socket error instead. Also bound the tests job, which ran into the 6 h job limit on this hang. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Member
Author
|
Lines changed at
No Note LLM-assisted content (no human feedback). |
A connect that failed on the spot stayed pending until the caller's timeout, so an unreachable network was reported as a timeout, and a failure seen through epoll or IOCP came back as a generic error, so a closed port was not reported as refused. Fail with the error connect returns, and with the pending socket error once readiness reports a failure. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
On Unix, EAGAIN from connect means no local resources, such as free ephemeral ports, not a connection in progress, so it now fails the connect instead of waiting for the caller's timeout. Also test that an error connect returns right away fails the future. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Member
Author
|
Review record. Copilot could not review
Note LLM-assisted content (no human feedback). |
Benoît Cortier (CBenoit)
deleted the
claude/macos-agent-ci-testing-86cd72
branch
October 25, 2026 04:35
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.

The Agent and the shared crates carry macOS-specific code, but CI compiled only jetsocat for macOS, so that code was never type-checked or tested there. Add a macos-15 (arm64) leg to the clippy and test jobs, let a failing leg finish without cancelling the other platforms, and bound the tests job at 60 minutes.
Running on macOS exposed these failures, now fixed:
retourdoes not compile on aarch64, so the workspace did not build on Apple Silicon.EINPROGRESSas a pending connection, so on macOS it never completed. It now fails with the errorconnectreturns instead of waiting for the caller's timeout, and reads a failed connection's cause from the pending socket error, which kqueue needs and which lets callers tell a refused port from an unreachable host on every platform.webappunder the macOS configuration directory.The macOS Rust shim repair now runs before the Rust cache setup, including in the jetsocat job, because the cache action runs
rustcfirst and a broken shim left those jobs uncached.🤖 Generated with Claude Code