Skip to content

chore(deps): refresh Rust dependencies and migrate to starbase 0.13 - #679

Merged
DamianReeves merged 1 commit into
mainfrom
chore/dependency-refresh
Aug 24, 2026
Merged

chore(deps): refresh Rust dependencies and migrate to starbase 0.13#679
DamianReeves merged 1 commit into
mainfrom
chore/dependency-refresh

Conversation

@DamianReeves

Copy link
Copy Markdown
Member

Summary

Rust half of the dependency refresh. Takes the updates from Renovate's renovate/rust branch (#638) and carries them to green — which that PR could not do on its own.

Supersedes #638.

Why #638 was stuck

Its renovate/artifacts check fails with "Artifact file update failure": Renovate could not regenerate Cargo.lock, so it shipped manifest bumps with no lockfile. Since #678 added --locked to CI, that combination now fails outright rather than silently re-resolving.

The artifact failure was caused by the toml_datetime conflict fixed in #677. Confirmed: applying #638's manifests and running cargo update now resolves cleanly (exit 0). Renovate should be unblocked going forward.

The extism workaround is gone

#677 downgraded proc-macro-crate to 2.0.0 to free toml_datetime so extism could reach 1.13. A full cargo update now reaches a strictly better state:

Package Before After
extism 1.13.0 1.30.0
extism-manifest 1.13.0 1.30.0 (matched)
wasmtime 37.0.3 43.0.2
proc-macro-crate 2.0.0 (downgraded) 2.0.2 (stock)

wasmtime 43 doesn't require toml_datetime >= 0.6.5, so the conflict simply doesn't arise. The downgrade is dropped — the extism fix is now structural rather than a pinned workaround that a future cargo update could undo.

starbase 0.10 → 0.13

The only source breakage in the entire refresh (E0107 was the sole error code across the full workspace check). Four distinct API changes:

  1. AppResult gained a generic error parameter. 0.10 defined it as miette::Result<Option<u8>>, so AppResult<miette::Report> preserves the previous semantics exactly — 23 return types across 12 files.
  2. AppSession gained an associated Error typetype Error = miette::Report;
  3. MainResult is now behind an opt-in miette feature (default = ["tracing"]) — enabled in the workspace manifest. It wasn't removed, just gated.
  4. App::run returns AppRunOutcome, not a Result — migrated to .into_miette_result().

Point 4 is a small behavioral improvement: the old ? path went through miette's default handling, which always exits 1 on error. into_miette_result() preserves the real exit code. Commented at the call site.

Verification

Every CI cargo step run locally with --locked, matching what CI now enforces:

Check morphir morphir-live
cargo fmt --check pass pass
cargo clippy --locked --all-targets -- -D warnings pass pass
cargo test --locked pass pass
cargo build --locked --release pass pass
cargo build --locked --release --features desktop pass

Plus cargo test --locked --workspace — pass. 10/10.

The desktop build is verified locally for the first time (GTK dev libraries now installed), which matters here since this refresh moves wasmtime 37→43 and touches the whole dioxus/GTK chain.

Scope

Rust only. The other three ecosystems remain with Renovate/Dependabot: #634 (npm major), #626 (GitHub Actions major), #675 (mise tools), #670 and #632 (website npm).

Takes the dependency updates from the renovate/rust branch (#638) and
carries them to green, which that PR could not do on its own: Renovate's
Cargo.lock regeneration was failing with "Artifact file update failure",
so it shipped manifest bumps with no matching lockfile.

That artifact failure was caused by the toml_datetime conflict fixed in
#677. With the lockfile resolvable again, a full `cargo update` reaches
a better state than the workaround in #677 did:

  extism           1.13.0 -> 1.30.0  (now matched with extism-manifest)
  extism-manifest  1.13.0 -> 1.30.0
  wasmtime         37.0.3 -> 43.0.2

wasmtime 43 does not require toml_datetime >= 0.6.5, so the conflict
that forced #677 to downgrade proc-macro-crate to 2.0.0 no longer
arises. That downgrade is dropped and proc-macro-crate returns to stock
2.0.2. The extism fix is now structural rather than a pinned
workaround.

starbase 0.10 -> 0.13 required a source migration, the only breakage in
the whole refresh:

  - AppResult gained a generic error parameter. 0.10 defined it as
    miette::Result<Option<u8>>, so AppResult<miette::Report> preserves
    the previous semantics exactly. 23 return types across 12 files.
  - AppSession gained an associated Error type.
  - MainResult is now behind an opt-in "miette" feature; enabled it.
  - App::run returns AppRunOutcome instead of a Result.
    into_miette_result() preserves the real exit code, where the old
    `?` path went through miette's default of always exiting 1.

Verified locally against the committed lockfile with --locked, matching
what CI now enforces. All ten checks pass: fmt, clippy -D warnings,
tests, and release builds for both morphir and morphir-live, including
the morphir-live desktop build.
@netlify

netlify Bot commented Aug 24, 2026

Copy link
Copy Markdown

Deploy Preview for angry-raman-7c44f6 canceled.

Name Link
🔨 Latest commit 5e73cf0
🔍 Latest deploy log https://app.netlify.com/projects/angry-raman-7c44f6/deploys/6a8b9780cd130e0008272dd6

@DamianReeves
DamianReeves merged commit 34efb3a into main Aug 24, 2026
10 checks passed
@DamianReeves
DamianReeves deleted the chore/dependency-refresh branch August 24, 2026 01:16
DamianReeves added a commit that referenced this pull request Aug 24, 2026
Takes the major bumps from the renovate/major-rust branch (#612):

  tuirealm              3 -> 4.1.0
  tui-realm-stdlib      3 -> 4.1.0
  tui-realm-textarea    2 -> 4.1.0
  usage-lib             2 -> 6.1.1
  toml               0.9.8 -> 1.1.4

No source changes were needed. Despite spanning a TUI framework major
and a four-major jump in usage-lib, the workspace compiles clean with
no errors and no clippy warnings.

That PR could not land as-is for the same reason as #638: Renovate's
lockfile regeneration was failing, so it carried manifest bumps with no
Cargo.lock, which CI now rejects via --locked. Resolution works now
that #677 and #679 have unwedged the dependency graph.

Verified locally against the committed lockfile with --locked: fmt,
clippy -D warnings, tests, and release builds for both morphir and
morphir-live, including the morphir-live desktop build. All ten pass.
DamianReeves added a commit that referenced this pull request Aug 24, 2026
Detect Changes gates the Rust and Docs jobs on path filters, but several
inputs those jobs actually depend on were not listed. Changing them ran
no jobs, so CI reported green without building anything. Three cases hit
this in the last day alone.

rust filter, additions:

  ecosystem/morphir-rust
    crates/morphir and crates/morphir-live path-depend on crates inside
    this submodule, so a ref bump changes the source being compiled.
    #677 only ran the Rust jobs because it also touched Cargo.lock; a
    submodule-only bump would have run nothing.

  .gitmodules
    Same reasoning, for submodule wiring changes.

  .config/mise/**
    Pins the Rust toolchain the jobs build with. #675 moved rustc from
    1.97.1 to 1.98.0 and both Rust jobs were skipped, so a compiler
    upgrade landed with no compilation. New clippy lints ship with new
    toolchains, which is exactly how the pager lints fixed in #679
    reached main unnoticed.

docs filter, addition:

  .config/mise/tasks/ci/validate_docs.py
    The Docs job runs this script, but editing it triggered no job.

Verified the workflow parses, and that the filters block parses as
dorny/paths-filter itself parses it: 7 rust patterns, 5 docs patterns,
comments stripped.

No filter change is needed for the website. Netlify builds it:
netlify.toml runs `npm run build` in website/, with an ignore clause
that skips only when neither website/ nor docs/ changed. Rust-only PRs
showing "Deploy Preview canceled" are that skip working as designed,
not missing coverage.
DamianReeves added a commit that referenced this pull request Aug 24, 2026
Detect Changes gates the Rust and Docs jobs on path filters, but several
inputs those jobs actually depend on were not listed. Changing them ran
no jobs, so CI reported green without building anything. Three cases hit
this in the last day alone.

rust filter, additions:

  ecosystem/morphir-rust
    crates/morphir and crates/morphir-live path-depend on crates inside
    this submodule, so a ref bump changes the source being compiled.
    #677 only ran the Rust jobs because it also touched Cargo.lock; a
    submodule-only bump would have run nothing.

  .gitmodules
    Same reasoning, for submodule wiring changes.

  .config/mise/**
    Pins the Rust toolchain the jobs build with. #675 moved rustc from
    1.97.1 to 1.98.0 and both Rust jobs were skipped, so a compiler
    upgrade landed with no compilation. New clippy lints ship with new
    toolchains, which is exactly how the pager lints fixed in #679
    reached main unnoticed.

docs filter, addition:

  .config/mise/tasks/ci/validate_docs.py
    The Docs job runs this script, but editing it triggered no job.

Verified the workflow parses, and that the filters block parses as
dorny/paths-filter itself parses it: 7 rust patterns, 5 docs patterns,
comments stripped.

No filter change is needed for the website. Netlify builds it:
netlify.toml runs `npm run build` in website/, with an ignore clause
that skips only when neither website/ nor docs/ changed. Rust-only PRs
showing "Deploy Preview canceled" are that skip working as designed,
not missing coverage.
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