chore(ci): add Linux Rust coverage and install guard (BRNS-DESK-064) - #93
Conversation
nir-ssvlabs
left a comment
There was a problem hiding this comment.
The workflow changes are right: the apt step is gated on runner.os == 'Linux' and sits ahead of both setup-node and the Rust setup, --no-install-recommends keeps it lean, and fail-fast: false was already there so a Linux break will report alongside the other two rather than masking them. The comment block explaining why this matrix exists — and why continue-on-error is never acceptable on it — is preserved, which matters more than the diff itself.
- 🟢
npm ls --depth=0exits non-zero on unmet peer ranges and extraneous packages, not just genuinely broken installs. That is the guard working as intended, but it also means a transitive dependency publishing a wider peer range can redden the Frontend job with no local change to explain it. Worth knowing when it first fires, so the reflex is to read the output rather than assume a bad merge.
Checked: the conditional and ordering of the install step, the package list against AC2, that the Chromium check stays macOS-only, and that nothing else in the matrix moved. Not read: nothing material — this is 20 lines of workflow.
Merge: ⛔ until Rust (ubuntu-latest) reports green. Every job on this PR was still pending at review time, and the entire point is whether the workspace actually builds and tests on Linux — a lane that goes red on merge blocks everyone, and a lane nobody has seen pass is not yet evidence of anything.
19285f2 to
bdfefe9
Compare
nir-ssvlabs
left a comment
There was a problem hiding this comment.
Re-reviewed at bdfefe90. The delta adds a two-line #[cfg] fix to actor_runner.rs's test module — #[cfg(target_os = "macos")] → #[cfg(unix)] on a use std::path::Path, because the Unix-gated fake CLI below it needs the import on Linux too. It's inside #[cfg(test)] mod tests, so nothing in production moves.
That is the new lane earning its place before it has even merged: the workspace did not compile on Linux, and nothing else in the matrix could have told you. Frontend is now green, so npm ls --depth=0 passes as a gate rather than tripping on peer ranges.
Merge: ⛔ still, but only until Rust (ubuntu-latest) reports — it was pending again at this head. Given it has already found one real break, seeing it go green is the whole point rather than a formality.
bdfefe9 to
edd5ce8
Compare
nir-ssvlabs
left a comment
There was a problem hiding this comment.
Re-reviewed at edd5ce8c. The Linux fix reversed direction and the new one is better: instead of widening the Path import to #[cfg(unix)], fake_cli is now #[cfg(target_os = "macos")] alongside its only caller (a_scheduled_run_emits_on_the_bus_the_window_is_listening_to, gated at 423). I checked that caller specifically, since narrowing a helper breaks any non-macOS user — there is none, and the ungated test below it doesn't touch fake_cli.
That's the minimal shape. The previous head would have compiled fake_cli on Linux with nothing calling it, which under clippy -D warnings is a dead-code failure rather than a fix.
Merge: ⛔ still, pending Rust (ubuntu-latest) — it hasn't reported at any of the three heads yet, and it is the one job this PR exists to add.
stefan-ssv-labs
left a comment
There was a problem hiding this comment.
✅ review-pr (self-review, cannot approve own PR): clean — BRNS-DESK-064 is satisfied. Exact-head Frontend, Rust Ubuntu/macOS/Windows, Eval, and Lint resources checks pass; the Pixel eval failure is the separate BRNS-DESK-080 issue and is not attributable to this diff.
Ticket
BRNS-DESK-064 — https://app.mybrains.ai/boards/1d99e87c-2f14-4034-87ff-749cd8468487
Summary
Adds a direct production dependency-tree guard after the frontend install and restores an Ubuntu Rust CI lane with explicit native Tauri, WebKit, tray, SVG, and packaging dependencies. The first clean Ubuntu runs exposed two latent test-only configuration defects: a fake CLI helper and its scheduled-run test were Unix-gated even though they exercise the intentionally macOS-only Seatbelt sandbox. They are now correctly macOS-only, so Linux runs the portable workspace contract without pretending scheduled agents are supported there.
Requirement mapping
Verification
Passed locally on macOS:
Initial GitHub CI evidence:
Independent CI finding:
Known local environment gaps, verified as unchanged on origin/dev:
Risk and non-goals
This change modifies CI configuration and narrowly aligns test compilation with the documented macOS-only sandbox contract. It does not add Linux application packaging, a Linux scheduled-agent implementation, or release artifacts. The explicit packages avoid relying on Ubuntu runner-image desktop libraries; the clean matrix is the package-list proof. No product capability, persistence, updater, or migration behavior changes.
Regression provenance
Source PR: #47
Relevant review: #47 (review)
The parity review identified the missing Linux Rust coverage and missing dependency-tree guard. The new Linux lane directly revealed the stale Unix test gating that macOS and Windows coverage had not exercised.
Reproduction
Environment: dev at 3bca163a15c22a0f5dbd8674768fcad022f23c9c before this change.
Expected: CI proves the portable Rust workspace on Ubuntu with explicit native dependencies and fails early when the installed production dependency tree is unhealthy; macOS-only sandbox tests stay limited to the platform that implements their boundary.
Actual before this PR: neither CI guard existed, and the latent Linux test failures were hidden.
Merge method: squash (do not merge-commit or rebase-merge).