Skip to content

ci: check linux and windows in addition to macos - #30

Merged
Horuse merged 3 commits into
mainfrom
ci/multi-os-checks
Aug 18, 2026
Merged

Horuse merged 3 commits into
mainfrom
ci/multi-os-checks

Conversation

@Horuse

@Horuse Horuse commented Aug 18, 2026

Copy link
Copy Markdown
Owner

What does this PR do?

The check job in CI runs only on macOS, so every PR leaves the Linux
(PipeWire) and Windows (WASAPI) backends unverified until release time.
This matrices the job across all three platforms so the per-OS cfg gates
actually get compiled on every PR.

Why is this the right approach?

A matrix is the standard pattern used by tauri-apps and cpal themselves:
one workflow, three runners, no duplicated steps. Linux needs its native
headers installed explicitly (PipeWire + GTK, same set as the release
workflow), while macOS and Windows runners ship their SDKs preinstalled.
Windows would fail without CMAKE_POLICY_VERSION_MINIMUM: '3.5' because
CMake 4.x rejects audiopus_sys's ancient policy version — that override is
already set in src-tauri/.cargo/config.toml for local builds, and this
mirrors it in CI. No new dependencies.

Checklist

  • Diff is limited to the change — no unrelated edits
  • bun run check passes
  • cargo check --manifest-path src-tauri/Cargo.toml passes
  • bun run format leaves the tree clean
  • Generated TS types are committed with the Rust change (if any)
  • No new dependency without a reason in the PR description
  • I read the RT audio path section of docs/CONCEPT.md and confirmed this
    change adds no allocations, locks, or syscalls to cpal / SCK callbacks
    or DspWorker::run

Horuse added 3 commits August 18, 2026 22:31
Matrix the check job across macOS, Ubuntu 22.04 and Windows. Linux gets
the PipeWire + GTK system deps the backend needs to compile; Windows gets
the CMake 4.x policy override for audiopus_sys. Windows WASAPI code stays
covered by the per-OS cfg gates on every PR instead of only at release.
Linux smoke tests need a live PipeWire daemon and the runner has none, so
the step boots one before cargo test. playback_pulls_samples hardcodes a
real ALSA device and cannot pass without hardware, so it is skipped there.
The Windows test binary cannot start because tauri embeds its Common-Controls
v6 manifest into the app binary only, not test harnesses (tauri#13419), so
Windows compiles with --no-run and tests run on macOS and Linux.
ts-rs emits the exported enum per platform, so cfg-gating the Au variant on
macOS made the committed PluginFormat.ts ("clap" | "au" | "vst3") diverge
from what Linux and Windows generate, failing the TS-RS bindings check.
The format is data that the UI already expects everywhere; only the AU
backend is macOS-only, so gate that instead and make the host dispatch
panic for Au on non-macOS.
@Horuse
Horuse merged commit 2af5b02 into main Aug 18, 2026
9 checks passed
@Horuse
Horuse deleted the ci/multi-os-checks branch August 18, 2026 21:44
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.

1 participant