Add desktop platform support #11

Open
claude-bot wants to merge 7 commits from worktree-desktop-support into main

7 commits

Author SHA1 Message Date
Austin Schaefer
04f628b70e Give the test job its own scoped target/ cache
All checks were successful
CI / fmt (pull_request) Successful in 13s
CI / clippy-native (pull_request) Successful in 3m31s
CI / clippy-server (pull_request) Successful in 3m46s
CI / clippy-web (pull_request) Successful in 3m23s
CI / clippy-desktop (pull_request) Successful in 4m27s
CI / test (pull_request) Successful in 7m48s
CI / audit (pull_request) Successful in 25s
test's own compiled objects are worth reusing across runs — it's the
only job needing full codegen, so it can't share anything with the
clippy jobs' check-only builds regardless of key. Scoping it to a key
the clippy jobs don't touch avoids the contention/collision problem
that came from all 5 jobs previously sharing one target/ cache key,
and since it excludes feedsignal-web, its target/ stays much smaller
than the combined cache removed earlier.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-16 16:06:40 +02:00
Austin Schaefer
9429ca100a Merge branch 'worktree-desktop-support' of ssh://code.austinschaefer.com:22222/schaefera/feedsignal into worktree-desktop-support
All checks were successful
CI / fmt (pull_request) Successful in 11s
CI / clippy-native (pull_request) Successful in 6m1s
CI / clippy-web (pull_request) Successful in 3m50s
CI / clippy-server (pull_request) Successful in 4m59s
CI / clippy-desktop (pull_request) Successful in 4m28s
CI / test (pull_request) Successful in 6m9s
CI / audit (pull_request) Successful in 28s
2026-09-16 15:22:45 +02:00
Austin Schaefer
9a9cd9d1d3 Stop caching target/ and fix sccache's per-run cache key
target/ was the majority of the ~1.5GB cache each of the 5 CI jobs
tarred and uploaded on every run — expensive on a single runner where
those uploads contend for the same disk/network, and pointless since
these jobs build different feature-set combinations into one
identically-keyed target dir anyway. sccache already gives compiler-
level reuse without that duplication.

sccache's cache key was keyed to github.run_id, which never gets an
exact hit, so its ~377MB also re-uploaded in full every single run
with no benefit. Key it to Cargo.lock like the registry cache instead,
so it only re-saves when dependencies actually change.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-16 15:22:30 +02:00
d002d44a2b Merge branch 'main' into worktree-desktop-support
All checks were successful
CI / fmt (pull_request) Successful in 15s
CI / clippy-native (pull_request) Successful in 11m46s
CI / clippy-server (pull_request) Successful in 11m46s
CI / clippy-web (pull_request) Successful in 3m32s
CI / clippy-desktop (pull_request) Successful in 3m37s
CI / test (pull_request) Successful in 10m14s
CI / audit (pull_request) Successful in 21s
2026-09-16 13:00:22 +00:00
Austin Schaefer
ef37690473 Hide the desktop window's title bar and default menu
Some checks failed
CI / fmt (pull_request) Successful in 15s
CI / clippy-web (pull_request) Has been cancelled
CI / clippy-desktop (pull_request) Has been cancelled
CI / test (pull_request) Has been cancelled
CI / audit (pull_request) Has been cancelled
CI / clippy-server (pull_request) Has been cancelled
CI / clippy-native (pull_request) Has been cancelled
Extract desktop window setup into its own crates/web/src/desktop.rs
module (SRP) with a single config() function, wired into main.rs via
LaunchBuilder::desktop().with_cfg(...). Disabling window decorations
also clears dioxus-desktop's default native menu bar as a side effect,
since it exists to give a decorated window something to hang off of.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-16 14:59:03 +02:00
Austin Schaefer
6c1020c3ef Split CI clippy checks into parallel jobs; move desktop build deps to a dedicated runner image
Some checks failed
CI / fmt (pull_request) Successful in 9s
CI / clippy-native (pull_request) Successful in 2m47s
CI / clippy-server (pull_request) Successful in 2m41s
CI / clippy-web (pull_request) Successful in 1m38s
CI / clippy-desktop (pull_request) Has been cancelled
CI / test (pull_request) Has been cancelled
CI / audit (pull_request) Has been cancelled
The single "check" job ran fmt + four clippy variants (native, server,
web, desktop) as sequential steps, so the desktop feature's clippy check
always waited on the other three even though none of them share
dependencies. Splitting each into its own job lets the runner (capacity
2) run them concurrently instead.

Also drops the per-run `apt-get install` for the GTK/WebKit headers
dioxus-desktop needs — those are now baked into a dedicated
`rust-ci-desktop` runner image (schaefera/infrastructure#TBD) so only the
desktop job's image is bigger, not every job's.

Depends on the `rust-ci-desktop` label being registered on the ci-runner
box before this workflow's clippy-desktop job can pick up work.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-15 13:30:36 +02:00
Austin Schaefer
67d399ad05 Add desktop platform support via a new feedsignal-web desktop feature
All checks were successful
CI / check (pull_request) Successful in 7m49s
CI / test (pull_request) Successful in 3m37s
CI / audit (pull_request) Successful in 14s
Combines dioxus's desktop (webview) renderer with the existing `server`
feature so `#[server]` functions execute in-process instead of going over
HTTP — one self-contained native binary with DB, feed polling, LLM calls,
and the scheduler, no separate server to run. main.rs picks the desktop
launcher explicitly since dioxus::launch's automatic platform detection
would otherwise prefer the (also-enabled) server platform over desktop.

Verified: cargo check/clippy pass for the new feature (native crates and
existing server/web features unaffected), and running the built binary
opens a window and completes an in-process server-fn call (DB connects,
migrations run) with no HTTP round trip. CI gets a matching desktop
clippy job with the GTK/WebKit apt packages dioxus-desktop needs to
compile on Linux.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-15 12:36:22 +02:00