Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .github/workflows/_ci-security.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,11 @@ jobs:
- uses: cashapp/activate-hermit@cea9af7913204a965fd488637a8d1811bba2e616 # v1
- name: Dependency policy
run: cargo-deny check
# desktop/src-tauri is excluded from the root workspace and has its own
# Cargo.lock; it uses the root deny.toml.
- name: Desktop dependency policy
if: ${{ !cancelled() }}
run: cargo-deny --manifest-path desktop/src-tauri/Cargo.toml check


results:
Expand Down
6 changes: 3 additions & 3 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -255,10 +255,10 @@ jobs:
security-domain:
name: Security Domain
needs: [changes]
if: github.event_name == 'push' || needs.changes.outputs.rust == 'true'
if: github.event_name == 'push' || needs.changes.outputs.rust == 'true' || needs.changes.outputs.desktop-rust == 'true'
uses: ./.github/workflows/_ci-security.yml
with:
rust: ${{ needs.changes.outputs.rust == 'true' }}
rust: ${{ needs.changes.outputs.rust == 'true' || needs.changes.outputs.desktop-rust == 'true' }}

rust-lint:
name: Rust Lint
Expand Down Expand Up @@ -430,7 +430,7 @@ jobs:

security:
name: Security
if: always() && (needs.changes.result != 'success' || ((github.event_name == 'push' || needs.changes.outputs.rust == 'true')))
if: always() && (needs.changes.result != 'success' || github.event_name == 'push' || needs.changes.outputs.rust == 'true' || needs.changes.outputs.desktop-rust == 'true')
needs: [changes, security-domain]
runs-on: ubuntu-latest
timeout-minutes: 5
Expand Down
17 changes: 17 additions & 0 deletions deny.toml
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,23 @@ ignore = [
# remove these when upstream catches up.
{ id = "RUSTSEC-2026-0194", reason = "transitive via rust-s3 and mesh-llm→plist; trusted-input XML only; no upstream fix available yet" },
{ id = "RUSTSEC-2026-0195", reason = "transitive via rust-s3 and mesh-llm→plist; trusted-input XML only; no upstream fix available yet" },
# Desktop workspace (desktop/src-tauri) — unmaintained crates with no safe upgrade.
# audiopus_sys: via `opus` 0.3 (huddle Opus decoder); fix is switching Opus bindings.
{ id = "RUSTSEC-2026-0150", reason = "desktop: audiopus_sys via opus; no maintained replacement adopted yet" },
# ringbuf 0.3.3: via `neteq` 0.8 (huddle jitter buffer). neteq declares ringbuf but its source never
# calls it, so Consumer::skip/clear (the affected functions) are unreachable; every neteq release,
# 0.9.1 included, still requires ringbuf ^0.3. Drop this when neteq moves to ringbuf >= 0.5.2.
{ id = "RUSTSEC-2026-0293", reason = "desktop: ringbuf 0.3 via neteq, which never calls it; no neteq release allows >= 0.5.2" },
# mach 0.1.2 / 0.3.2: via `user-idle` 0.6 (macOS idle detection).
{ id = "RUSTSEC-2020-0168", reason = "desktop: mach via user-idle; no upstream fix available" },
# proc-macro-error: via tauri → tray-icon → gtk 0.18 → glib-macros (Linux only).
{ id = "RUSTSEC-2024-0370", reason = "desktop: proc-macro-error via tauri's gtk 0.18 stack; waits on tauri" },
# unic-*: via tauri-utils → urlpattern 0.3.
{ id = "RUSTSEC-2025-0075", reason = "desktop: unic-char-range via tauri-utils → urlpattern; waits on tauri" },
{ id = "RUSTSEC-2025-0080", reason = "desktop: unic-common via tauri-utils → urlpattern; waits on tauri" },
{ id = "RUSTSEC-2025-0081", reason = "desktop: unic-char-property via tauri-utils → urlpattern; waits on tauri" },
{ id = "RUSTSEC-2025-0098", reason = "desktop: unic-ucd-version via tauri-utils → urlpattern; waits on tauri" },
{ id = "RUSTSEC-2025-0100", reason = "desktop: unic-ucd-ident via tauri-utils → urlpattern; waits on tauri" },
# unsafe-libyaml 0.2.11: unmaintained (no vulnerability), via serde_yaml. No maintained
# drop-in is adopted upstream yet; owner chose to ignore it on 2026-10-12.
{ id = "RUSTSEC-2024-0449", reason = "unmaintained, no safe upgrade; via serde_yaml" },
Expand Down