A macOS job in CI, with its coverage #3

Merged
bcox merged 3 commits from bcox/mac-ci into main 2026-11-04 01:45:07 +00:00 AGit
Owner

Stacked on #2 (and so on #1): until those merge, this branch holds their commits too.

The Audio Unit (plugin_kit/auv3/) and the Mac's window (mac_window.cc) build only on macOS, so nothing in CI built or tested them.

  • A macos job on the macos-arm64 runner (kaelego), beside the Linux lanes rather than after them: bazel test --copt=-Werror //... on every event, with a kept --output_base under $HOME, as the release jobs do.
  • On a pull request, coverage too: tools/coverage.sh, uploaded as the coverage-macos artifact. Its total goes into the coverage comment beside the Linux one (coverage now needs: [pi, macos]).
  • A fix for coverage on macOS: it reported nothing at all, because clang recorded each source by its absolute sandbox path, which nothing matched. coverage:macos --copt=-fcoverage-compilation-dir=. makes the paths relative, the way /proc/self/cwd/ works on Linux.
  • tools/coverage.sh takes BAZEL_STARTUP for startup options.

Checked on kaelego, running the job's steps exactly: 13 tests pass, and 4 skip because they're Linux-only. Coverage is 63.6% of the lines macOS compiles; auv3.cc is at 45.0%, and mac_window.cc at 0%, with nothing testing it yet. Kaelego has no genhtml, so the artifact is the report and the summary, without HTML pages.

🤖 Generated with Claude Code

**Stacked on #2** (and so on #1): until those merge, this branch holds their commits too. The Audio Unit (`plugin_kit/auv3/`) and the Mac's window (`mac_window.cc`) build only on macOS, so nothing in CI built or tested them. - **A `macos` job** on the `macos-arm64` runner (kaelego), beside the Linux lanes rather than after them: `bazel test --copt=-Werror //...` on every event, with a kept `--output_base` under `$HOME`, as the release jobs do. - **On a pull request, coverage too:** `tools/coverage.sh`, uploaded as the `coverage-macos` artifact. Its total goes into the coverage comment beside the Linux one (`coverage` now `needs: [pi, macos]`). - **A fix for coverage on macOS:** it reported nothing at all, because clang recorded each source by its absolute sandbox path, which nothing matched. `coverage:macos --copt=-fcoverage-compilation-dir=.` makes the paths relative, the way `/proc/self/cwd/` works on Linux. - **`tools/coverage.sh`** takes `BAZEL_STARTUP` for startup options. Checked on kaelego, running the job's steps exactly: 13 tests pass, and 4 skip because they're Linux-only. Coverage is 63.6% of the lines macOS compiles; `auv3.cc` is at 45.0%, and `mac_window.cc` at 0%, with nothing testing it yet. Kaelego has no `genhtml`, so the artifact is the report and the summary, without HTML pages. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
X11 tests under Xvfb, a test of the X11 window, and coverage
Some checks failed
ci / default (pull_request) Failing after 5m21s
ci / opt (pull_request) Failing after 5m13s
ci / asan (pull_request) Failing after 5m14s
ci / ubsan (pull_request) Failing after 5m46s
ci / tsan (pull_request) Failing after 5m24s
ci / coverage (pull_request) Failing after 5m58s
339ab165f4
CI's lanes run the X11 tests against Xvfb (-noreset: the server otherwise
starts over whenever its last client leaves, refusing the next test's
connection). x11_window_test drives the window as its host would: a parent
window, input sent to it, the parent resized, its pixels read back. With
DISPLAY set and unreachable the X11 tests now fail instead of skipping.

bazel coverage is configured in .bazelrc, and tools/coverage.sh writes
coverage/: the merged report, a summary, genhtml's pages and diff-cover's
report of the lines changed since a base. A coverage job follows the lanes
on a pull request and posts that report on it. Line coverage goes from 65%
to 89%; x11_window.cc from none to 86%.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
CI on a runner labeled x86-64-v3
Some checks failed
ci / default (pull_request) Successful in 2m10s
ci / opt (pull_request) Successful in 2m20s
ci / asan (pull_request) Has been cancelled
ci / ubsan (pull_request) Has been cancelled
ci / tsan (pull_request) Has been cancelled
ci / coverage (pull_request) Has been cancelled
0a3f3f1b78
The tests run the plugins, which refuse a processor without AVX2 and FMA, and
the runner labeled docker is an Ivy Bridge, so every lane failed there before
running a test. Every job now asks for x86-64-v3, as gridrunner is labeled; all
on one runner, they share its cache.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A build for the Raspberry Pi 3B, and a CI lane that makes it
Some checks failed
ci / tsan (pull_request) Blocked by required conditions
ci / pi (pull_request) Blocked by required conditions
ci / coverage (pull_request) Blocked by required conditions
ci / default (pull_request) Successful in 5m12s
ci / opt (pull_request) Failing after 2m23s
ci / asan (pull_request) Failing after 2m22s
ci / ubsan (pull_request) Waiting to run
d193a4a30f
--config=pi cross-builds the kit for aarch64 Linux as ../mini-800 does: the
x86_64 clang targeting aarch64 against Debian 12's arm64 glibc, with LLVM's
aarch64 libc++ linked statically, all as dev dependencies and registered first.
A CI lane, pi, builds //... that way with -Werror and runs nothing, so a change
that breaks the kit for a repository targeting the Pi fails here.

A .vst3 for aarch64 Linux is bundled without moduleinfo.json, as the exec tool
cannot load it. The Linux packages took amd64 as their architecture whatever
they held; they now say arm64 (aarch64 in the .rpm) for the Pi.

ci_test.sh gains a build mode for the lane.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A macOS job in CI, with its coverage
Some checks are pending
ci / default (pull_request) Waiting to run
ci / opt (pull_request) Blocked by required conditions
ci / asan (pull_request) Blocked by required conditions
ci / ubsan (pull_request) Blocked by required conditions
ci / tsan (pull_request) Blocked by required conditions
ci / pi (pull_request) Blocked by required conditions
ci / coverage (pull_request) Blocked by required conditions
ci / macos (pull_request) Successful in 47s
b94e199e4c
The Audio Unit and the Mac's window build only on macOS, so nothing in CI built
or tested them. A macos job on the macos-arm64 runner runs the tests with
-Werror, beside the Linux lanes, and on a pull request their coverage, whose
total the coverage comment gives beside the Linux one.

Coverage on macOS reported nothing: clang recorded each source by its absolute
path in the sandbox, which no report matched. -fcoverage-compilation-dir=. makes
it relative, as /proc/self/cwd/ is on Linux. tools/coverage.sh takes
BAZEL_STARTUP, for the job's kept --output_base.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
bcox force-pushed bcox/mac-ci from b94e199e4c
Some checks are pending
ci / default (pull_request) Waiting to run
ci / opt (pull_request) Blocked by required conditions
ci / asan (pull_request) Blocked by required conditions
ci / ubsan (pull_request) Blocked by required conditions
ci / tsan (pull_request) Blocked by required conditions
ci / pi (pull_request) Blocked by required conditions
ci / coverage (pull_request) Blocked by required conditions
ci / macos (pull_request) Successful in 47s
to 276eadf64f
Some checks failed
ci / macos (pull_request) Successful in 44s
ci / default (pull_request) Successful in 2m13s
ci / opt (pull_request) Successful in 2m14s
ci / asan (pull_request) Successful in 2m12s
ci / ubsan (pull_request) Successful in 2m12s
ci / tsan (pull_request) Failing after 2m11s
ci / pi (pull_request) Successful in 9m18s
ci / coverage (pull_request) Waiting to run
2026-11-03 22:40:43 +00:00
Compare
bcox force-pushed bcox/mac-ci from 276eadf64f
Some checks failed
ci / macos (pull_request) Successful in 44s
ci / default (pull_request) Successful in 2m13s
ci / opt (pull_request) Successful in 2m14s
ci / asan (pull_request) Successful in 2m12s
ci / ubsan (pull_request) Successful in 2m12s
ci / tsan (pull_request) Failing after 2m11s
ci / pi (pull_request) Successful in 9m18s
ci / coverage (pull_request) Waiting to run
to 13355490fc
Some checks failed
ci / macos (pull_request) Failing after 39s
ci / default (pull_request) Successful in 2m9s
ci / opt (pull_request) Successful in 2m10s
ci / asan (pull_request) Successful in 2m10s
ci / ubsan (pull_request) Successful in 2m10s
ci / pi (pull_request) Has been cancelled
ci / coverage (pull_request) Has been cancelled
ci / tsan (pull_request) Has been cancelled
2026-11-03 23:32:24 +00:00
Compare
Merge branch 'refs/heads/main' into mac-ci
Some checks failed
ci / macos (pull_request) Failing after 41s
ci / default (pull_request) Successful in 2m13s
ci / opt (pull_request) Successful in 2m11s
ci / asan (pull_request) Has been cancelled
ci / ubsan (pull_request) Has been cancelled
ci / tsan (pull_request) Has been cancelled
ci / pi (pull_request) Has been cancelled
ci / coverage (pull_request) Has been cancelled
44c6448f12
Coverage's pages with LCOV 2, as the Mac has
All checks were successful
ci / macos (pull_request) Successful in 41s
ci / default (pull_request) Successful in 2m13s
ci / opt (pull_request) Successful in 2m12s
ci / asan (pull_request) Successful in 2m13s
ci / ubsan (pull_request) Successful in 2m14s
ci / tsan (pull_request) Successful in 2m28s
ci / pi (pull_request) Successful in 2m51s
ci / coverage (pull_request) Successful in 2m41s
0f775dad5c
genhtml 2 refuses a report whose function counts disagree with their lines',
as clang's do for the Audio Unit's Objective-C blocks and lambdas, and the
macos job failed after its tests had passed. tools/coverage.sh waives that
for LCOV 2 and later; Debian 12's LCOV 1.16 neither checks it nor takes the
flag.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

Diff Coverage

Diff: origin/main...HEAD, staged and unstaged changes

No lines with coverage information in this diff.

Whole suite: 89.3% 1924/2154 total. Every file: the coverage-html artifact of this run.

On macOS, with the Audio Unit and the Mac's window: 63.6% 1665/2618 total (the coverage-macos artifact).

# Diff Coverage ## Diff: origin/main...HEAD, staged and unstaged changes No lines with coverage information in this diff. Whole suite: 89.3% 1924/2154 total. Every file: the coverage-html artifact of [this run](https://forge.djehuti.com/bcox/plugin-kit/actions/runs/18). On macOS, with the Audio Unit and the Mac's window: 63.6% 1665/2618 total (the coverage-macos artifact).
bcox merged commit aa1f28d73b into main 2026-11-04 01:45:07 +00:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
bcox/plugin-kit!3
No description provided.