Skip to content

ci: declare and enforce MSRV of 1.91.1#8670

Merged
jh-block merged 1 commit intomainfrom
jhugo/msrv-1.91.1
Apr 21, 2026
Merged

ci: declare and enforce MSRV of 1.91.1#8670
jh-block merged 1 commit intomainfrom
jhugo/msrv-1.91.1

Conversation

@jh-block
Copy link
Copy Markdown
Collaborator

Category: infrastructure
User Impact: Distro packagers (Fedora, Debian, etc.) now have a documented minimum Rust version to target, and the project will no longer silently drift above it.

Problem: A Red Hat engineer packaging goose for Fedora hit a build failure because a transitive dependency had jumped its MSRV past Fedora's packaged rustc. goose had no declared MSRV and no CI enforcement, so any cargo update could silently raise the floor and break downstream packagers without us noticing.

Solution: Declare rust-version = "1.91.1" in the workspace Cargo.toml (this matches the current effective floor, driven by aws-smithy-xml 0.60.15 among others) and propagate it to every member crate. Add a rust-msrv CI job that reads the version out of Cargo.toml and runs cargo check --workspace --locked --all-targets against exactly that toolchain, so MSRV violations fail CI on the offending PR. The version lives in one place; CI extracts it, so future bumps are a one-line change.

File changes

Cargo.toml
Added rust-version = "1.91.1" to [workspace.package] as the single source of truth for the MSRV.

crates/*/Cargo.toml (9 files)
Added rust-version.workspace = true so each member crate inherits the workspace MSRV and reports it in cargo metadata.

.github/workflows/ci.yml
Added a new rust-msrv job that extracts the MSRV from Cargo.toml via sed, installs that exact toolchain, and runs cargo check --workspace --locked --all-targets. Uses a dedicated Swatinem/rust-cache key so it doesn't evict the main build cache.

Reproduction Steps

  1. Run `cargo metadata --format-version 1 --no-deps | jq '.packages[] | {name, rust_version}'` and confirm every goose crate reports `"1.91.1"`.
  2. Install the MSRV toolchain locally: `rustup toolchain install 1.91.1 --profile minimal`.
  3. Run `cargo +1.91.1 check --workspace --locked --all-targets` and confirm it builds cleanly.
  4. In CI, observe the new `Check MSRV` job running alongside the existing lint and build jobs.

Set rust-version in the workspace Cargo.toml and propagate it to every
member crate. Add a rust-msrv CI job that reads the MSRV out of
Cargo.toml and runs cargo check --workspace --locked --all-targets
against exactly that toolchain, so new dependencies that raise the
floor fail CI instead of silently breaking downstream packagers.

The floor today is driven by transitive deps (aws-smithy-xml 0.60.15
declares rust-version = 1.91.1, and several pctx_* / aws-smithy-*
crates sit above 1.88).

Signed-off-by: jh-block <jhugo@block.xyz>
@jh-block jh-block requested a review from jamadeo April 20, 2026 19:30
@jh-block jh-block added this pull request to the merge queue Apr 21, 2026
Merged via the queue into main with commit 2067a56 Apr 21, 2026
22 checks passed
@jh-block jh-block deleted the jhugo/msrv-1.91.1 branch April 21, 2026 16:15
spikewang pushed a commit to spikewang/goose that referenced this pull request Apr 22, 2026
Signed-off-by: jh-block <jhugo@block.xyz>
lifeizhou-ap added a commit that referenced this pull request Apr 22, 2026
* main:
  feat: extend goose2 context window ux with auto-compaction (#8721)
  improve goose2 agent management flows (#8737)
  alexhancock/tui-improvements (#8736)
  fix: add strict:false to Responses API tools and gpt-5.4 to known models (#8636)
  persist and reliably apply chat model selection (#8734)
  merge goose-acp crate into goose (#8726)
  docs: AGENTS.md section on goose2 desktop backend architecture (#8732)
  feat: goose2 message bubble + action tray (#8720)
  consolidate provider ACP methods onto inventory (#8710)
  ci: declare and enforce MSRV of 1.91.1 (#8670)
  fix(ui): correct grammar in apps view description (#8668) (#8679)
  Stop load openai fast model for openapi compatible custom endpoint (#8644)
lifeizhou-ap added a commit that referenced this pull request Apr 22, 2026
* main: (41 commits)
  removed the specific code owner for documentation change (#8749)
  fix(providers): handle missing delta field in streaming chunks (#8700)
  refactor(providers): extract http_status module and rename handle_status_openai_compat (#8620)
  fix(providers/openai): accept streaming chunks with both reasoning fields (#8715)
  feat: associate threads with projects (#8745)
  upgrade goose sdk and tui to be compatible with the latest agentclientprotocol/sdk package (#8667)
  feat: extend goose2 context window ux with auto-compaction (#8721)
  improve goose2 agent management flows (#8737)
  alexhancock/tui-improvements (#8736)
  fix: add strict:false to Responses API tools and gpt-5.4 to known models (#8636)
  persist and reliably apply chat model selection (#8734)
  merge goose-acp crate into goose (#8726)
  docs: AGENTS.md section on goose2 desktop backend architecture (#8732)
  feat: goose2 message bubble + action tray (#8720)
  consolidate provider ACP methods onto inventory (#8710)
  ci: declare and enforce MSRV of 1.91.1 (#8670)
  fix(ui): correct grammar in apps view description (#8668) (#8679)
  Stop load openai fast model for openapi compatible custom endpoint (#8644)
  feat(hooks): add Husky git hooks for ui/goose2 (#8577)
  fix: links in chat could not be opened (#8544)
  ...
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.

2 participants