Skip to content

ci(security): run cargo-deny on the desktop Tauri workspace - #29

Open
QuicksilverSlick wants to merge 1 commit into
mainfrom
ci/desktop-cargo-deny
Open

QuicksilverSlick wants to merge 1 commit into
mainfrom
ci/desktop-cargo-deny

Conversation

@QuicksilverSlick

Copy link
Copy Markdown
Owner

Summary

CI's Security job runs cargo-deny check against the root workspace only. desktop/src-tauri is excluded from that workspace and has its own Cargo.lock, so the app we actually ship to users was never checked. Vulnerable h2 and rtrb, a yanked chacha20, and the rustls advisory all sat there unnoticed.

  • _ci-security.yml: adds a second step, cargo-deny --manifest-path desktop/src-tauri/Cargo.toml check. It uses the root deny.toml and runs even if the root step fails (!cancelled()), so one run reports both workspaces.
  • ci.yml: the Security domain and the Security gate now also start on desktop-rust changes. Without that, a desktop-only lockfile PR (like fix(deps): bump h2, rtrb and chacha20 in the desktop lockfile #28) never runs the check. This is the same condition Rust Lint already uses.
  • deny.toml: ignores the 8 unmaintained advisories in the desktop tree that have no safe upgrade, with reasons. Triage details are in fix(deps): bump h2, rtrb and chacha20 in the desktop lockfile #28.
ID Crate Pulled in by
RUSTSEC-2026-0150 audiopus_sys opus 0.3 (direct)
RUSTSEC-2020-0168 mach user-idle 0.6 (direct)
RUSTSEC-2024-0370 proc-macro-error tauri → tray-icon → gtk 0.18 (Linux)
RUSTSEC-2025-0075/0080/0081/0098/0100 unic-* tauri-utils → urlpattern 0.3

Merge order: #27 and #28 first. On its own, this PR's Security job is expected to fail on rustls (#27), h2 and rtrb (#28). Once both are merged, rebase this branch or rerun the job.

This makes desktop behave like root: when a new RustSec advisory lands against a desktop dependency, main turns red without any code change.

Related issue

Follows #27 and #28. No existing issue found.

Testing

  • Merged this branch with fix(deps): bump rustls to 0.23.45 for RUSTSEC-2026-0285 #27 and fix(deps): bump h2, rtrb and chacha20 in the desktop lockfile #28 locally (the lockfiles auto-merge cleanly), then ran cargo-deny 0.19.0:
    • cargo-deny check (root): advisories, bans, licenses and sources all ok. The 8 new ignore IDs don't occur in the root tree, so root prints 8 advisory-not-detected warnings. They are warnings only.
    • cargo-deny --manifest-path desktop/src-tauri/Cargo.toml check: advisories, bans, licenses and sources all ok.
  • On main alone, the desktop step fails with 3 vulnerabilities and 8 unmaintained, so the step does catch problems.
  • Both workflow files parse as YAML.

🤖 Generated with Claude Code

desktop/src-tauri is excluded from the root workspace and has its own
Cargo.lock, so the Security job never checked it. Vulnerable h2 and
rtrb, a yanked chacha20 and the rustls advisory sat there unnoticed.

- Add a second cargo-deny step with --manifest-path desktop/src-tauri
  (runs even if the root step fails, so both reports show).
- Start the Security domain and gate on desktop-rust changes too, or a
  desktop-only lockfile change never runs it.
- Ignore the 8 desktop unmaintained advisories that have no safe
  upgrade (audiopus_sys, mach, proc-macro-error, unic-*), with reasons.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
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