Harden the leptos/dioxus dependency-update workflow
#1 in tonybierman/arium — merged 2026-05-24
Makes staying current with Leptos/Dioxus releases (and the wider dep tree) less painful and less risky. Detection of outdated deps already existed (nightly cargo outdated/audit); this adds the pieces that catch breakage and make resolution reproducible.
Changes
Server-fn HTTP round-trip test, per adapter (
crates/arium-{leptos,dioxus}/tests/server_fn_roundtrip.rs). Boots the realinstall-layered router on an ephemeral port and drivesregister → login → authenticated read → logoutover HTTP with a cookie jar. The adapters previously had zero runtime tests (the engine has 112) — they were onlycargo check-compiled, so a framework release that compiled but changed the server-fn wire format / response shape / session-cookie handling would pass CI silently. These turn that red. (Confirmed empirically: Leptos posts form-encoded; Dioxus#[post]takes JSON and reads the profile via#[get].)Pin
dioxus-primitivesto an explicit gitrevin both manifests. It's a git dep with no crates.io release, so a barecargo updatecould otherwise pull a breakingHEAD.Dependabot (
.github/dependabot.yml): weekly, grouped cargo + github-actions updates, withdioxusandleptoseach in their own isolated group so a framework bump (0.x minor = breaking) lands as a standalone, separately-reviewable PR rather than buried in a batch.rust-toolchain.tomlpins the compiler (1.95.0 + rustfmt/clippy + wasm32). A toolchain bump becomes a deliberate PR instead of silent drift through the gating clippy job. CI now provisions from the file (rustup show) instead ofdtolnay/rust-toolchain@stable, so the file is the single source of truth.Wasm-target logic test, per adapter (
tests/wasm_client.rs). Runs in Node viawasm-bindgen-test-runner(no browser), exercising the re-exported wire-type serde round-trip (and, for Leptos,friendly_server_error) on the client/hydrate build — turning the wasm job from "compiles" into "runs". Newwasm-testCI job auto-derives the matchingwasm-bindgenversion from the resolved graph, so a wasm-bindgen bump needs no edit here.Commit
Cargo.lock(un-gitignored). Without it, CI resolved fresh on every run, so a compatible-but-broken upstream release could redden an unrelated PR and not reproduce locally. Now every build resolves identically and dependency bumps show up as explicit lockfile diffs.
Notes
- Dev-deps are split by target (native server stack under
cfg(not(wasm32)),wasm-bindgen-testundercfg(wasm32)) and each test file iscfg-guarded, so a--target wasm32test build never pulls the tokio/sqlx/reqwest stack that can't build for wasm. - The Dioxus round-trip test mounts via
register_server_functions()ontoFullstackState::headless()becausedioxus::server::router(app)requires a builtpublic/asset dir.
Verification (local)
- Both round-trip tests pass (real HTTP).
- Both wasm tests pass in Node.
cargo fmt --all --checkclean;cargo clippy --tests -- -D warningsclean on both adapters.- Toolchain pin active (1.95.0);
Cargo.lockresolves cleanly under--locked.
🤖 Generated with Claude Code
Last updated 2026-05-25
Links to this note
Merged pull requests, newest first.