Skip to content

cargo-workspace plugin excludes independent Rust package path from configured multi-package release #2753

@jolars

Description

@jolars

Thanks for stopping by to let us know something could be better!

Please provide the following details.

Environment details

  • OS: nixos (linux)
  • Node.js version: 24.14.0
  • npm version: 11.9.0
  • release-please version: 17.5.2

Summary

release-please-action@v4 detects and evaluates a configured Rust package path (editors/zed), but after running the cargo-workspace plugin it is excluded from the in-scope releases and not version-bumped in the release PR.

This happens even though:

  • the path is explicitly configured in release-please-config.json
  • there are qualifying commits under that path
  • the plugin logs show the path was considered

Environment

Configuration

release-please-config.json:

{
  "plugins": ["cargo-workspace"],
  "release-type": "rust",
  "packages": {
    ".": {
      "exclude-paths": ["crates", "editors"]
    },
    "crates/panache-parser": {},
    "editors/code": {
      "release-type": "node",
      "package-name": "panache-code"
    },
    "editors/zed": {
      "release-type": "rust",
      "package-name": "panache-zed",
      "extra-files": [
        {
          "type": "toml",
          "path": "extension.toml",
          "jsonpath": "$.version"
        }
      ]
    }
  }
}

Relevant manifest entry (.release-please-manifest.json):

{
  "editors/zed": "2.32.0"
}

editors/zed/Cargo.toml:

[package]
name = "zed_panache"
version = "2.32.0"
publish = false

[workspace]

Root Cargo.toml workspace members:

[workspace]
members = ["crates/panache-parser", "crates/panache-wasm"]

(editors/zed is intentionally not a member of the root workspace.)

Reproduction

  1. Configure a monorepo with:
    • root rust package (.),
    • one rust crate in root workspace,
    • one independent rust package path with its own Cargo.toml and [workspace] outside root workspace members.
  2. Enable plugins: ["cargo-workspace"].
  3. Configure all paths explicitly in packages.
  4. Push a fix commit touching only the independent package path:
  5. Run release-please action.

Actual behavior

Logs show:

  • Building candidate release pull request for path: editors/zed
  • Considering: 4 commits
  • component: panache-zed
  • running plugin: CargoWorkspace
  • Found 3 in-scope releases

The resulting release PR updates root/parser/code versions, but does not bump editors/zed in:

  • .release-please-manifest.json
  • editors/zed/Cargo.toml
  • editors/zed/extension.toml

Expected behavior

If a path is explicitly configured under packages and has qualifying commits, it should remain in-scope and get a candidate release/version bump, even if it is not part of the root Cargo workspace members.

At minimum, docs should clearly state that cargo-workspace restricts Rust package paths to root workspace members and will silently drop independently configured Rust paths.

Why this seems like a bug (or at least surprising behavior)

  • The path is recognized and evaluated before plugin scoping.
  • The action does not fail; it silently excludes the configured path.
  • Mixed ecosystems in the same config (node + multiple rust paths) otherwise work.

Additional notes

If this is intended behavior, a warning that names the excluded paths and the reason (not in workspace scope) would help a lot.

Metadata

Metadata

Assignees

Labels

priority: p3Desirable enhancement or fix. May not be included in next release.type: bugError or flaw in code with unintended results or allowing sub-optimal usage patterns.

Type

No type
No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions