Skip to content

decrating: Phase 7 — path+version deps + workspace.dependencies + default-members#78

Merged
EffortlessSteven merged 1 commit into
mainfrom
feature/decrating-phase7-path-version
Apr 15, 2026
Merged

decrating: Phase 7 — path+version deps + workspace.dependencies + default-members#78
EffortlessSteven merged 1 commit into
mainfrom
feature/decrating-phase7-path-version

Conversation

@EffortlessSteven

Copy link
Copy Markdown
Member

Summary

Phase 7 of the Shipper decrating effort. Converts the workspace to publish-shaped form so every crate can actually be packaged and published.

Changes

  • Root Cargo.toml: Adds [workspace.dependencies] with all 12 intra-workspace crates declared as path + version = "0.3.0-rc.1". Adds default-members = ["crates/shipper-cli", "crates/shipper"] so root-level cargo build / cargo test target the two product crates. Also normalizes the stray indentation on shipper-output-sanitizer.
  • Each member Cargo.toml (shipper, shipper-cli, shipper-config, shipper-types, shipper-registry): all sibling deps now use dep.workspace = true instead of { path = "../foo" }.

Why

Cargo rule: published crates cannot have path-only dependencies. Before this change, cargo package --no-verify -p shipper-types failed with:

all dependencies must have a version requirement specified when packaging.
dependency shipper-duration does not specify a version

After this change, cargo package --list succeeds for every public crate.

Validation

  • Before: 21 path-only intra-workspace deps across 5 crates (shipper, shipper-cli, shipper-config, shipper-types, shipper-registry).
  • After: 0 path-only intra-workspace deps.
  • cargo check --workspace --all-targets clean.
  • cargo clippy --workspace --all-targets --all-features -- -D warnings clean.
  • cargo fmt --all -- --check clean.
  • cargo package --list -p <crate> exits 0 for all 12 crates.

Per docs/decrating-plan.md §6 Phase 7.

Test plan

  • CI: workspace check, clippy, fmt, tests all green
  • Manual: cargo package --list succeeds for every publishable crate
  • Manual: root-level cargo build only builds shipper + shipper-cli (default-members)

…ault-members

Converts the workspace to publish-shaped form. All intra-workspace sibling
dependencies now use [workspace.dependencies] with both path and version,
making them valid for cargo publish. Each member consumes via
`dep.workspace = true`.

Adds `default-members = ["crates/shipper-cli", "crates/shipper"]` to root
so root-level package commands target the two product crates by default
rather than all 12.

Validation: cargo package --list succeeds for every published crate.

Per docs/decrating-plan.md §6 Phase 7.
@EffortlessSteven EffortlessSteven merged commit 3049a24 into main Apr 15, 2026
9 of 16 checks passed

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request centralizes dependency management by defining intra-workspace crates within the root Cargo.toml and updating individual member crates to utilize workspace = true. It also configures default-members for the workspace. Feedback was provided to sort the dependency lists alphabetically in both the root and the shipper crate's configuration to improve readability and maintainability.

Comment thread Cargo.toml
Comment on lines +31 to +42
shipper = { path = "crates/shipper", version = "0.3.0-rc.1" }
shipper-cli = { path = "crates/shipper-cli", version = "0.3.0-rc.1" }
shipper-config = { path = "crates/shipper-config", version = "0.3.0-rc.1" }
shipper-types = { path = "crates/shipper-types", version = "0.3.0-rc.1" }
shipper-duration = { path = "crates/shipper-duration", version = "0.3.0-rc.1" }
shipper-retry = { path = "crates/shipper-retry", version = "0.3.0-rc.1" }
shipper-encrypt = { path = "crates/shipper-encrypt", version = "0.3.0-rc.1" }
shipper-webhook = { path = "crates/shipper-webhook", version = "0.3.0-rc.1" }
shipper-registry = { path = "crates/shipper-registry", version = "0.3.0-rc.1" }
shipper-sparse-index = { path = "crates/shipper-sparse-index", version = "0.3.0-rc.1" }
shipper-cargo-failure = { path = "crates/shipper-cargo-failure", version = "0.3.0-rc.1" }
shipper-output-sanitizer = { path = "crates/shipper-output-sanitizer", version = "0.3.0-rc.1" }

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The intra-workspace dependencies in [workspace.dependencies] are not sorted alphabetically. Maintaining an alphabetical order for dependencies improves readability and makes it easier to locate specific crates as the workspace grows.

Suggested change
shipper = { path = "crates/shipper", version = "0.3.0-rc.1" }
shipper-cli = { path = "crates/shipper-cli", version = "0.3.0-rc.1" }
shipper-config = { path = "crates/shipper-config", version = "0.3.0-rc.1" }
shipper-types = { path = "crates/shipper-types", version = "0.3.0-rc.1" }
shipper-duration = { path = "crates/shipper-duration", version = "0.3.0-rc.1" }
shipper-retry = { path = "crates/shipper-retry", version = "0.3.0-rc.1" }
shipper-encrypt = { path = "crates/shipper-encrypt", version = "0.3.0-rc.1" }
shipper-webhook = { path = "crates/shipper-webhook", version = "0.3.0-rc.1" }
shipper-registry = { path = "crates/shipper-registry", version = "0.3.0-rc.1" }
shipper-sparse-index = { path = "crates/shipper-sparse-index", version = "0.3.0-rc.1" }
shipper-cargo-failure = { path = "crates/shipper-cargo-failure", version = "0.3.0-rc.1" }
shipper-output-sanitizer = { path = "crates/shipper-output-sanitizer", version = "0.3.0-rc.1" }
shipper = { path = "crates/shipper", version = "0.3.0-rc.1" }
shipper-cargo-failure = { path = "crates/shipper-cargo-failure", version = "0.3.0-rc.1" }
shipper-cli = { path = "crates/shipper-cli", version = "0.3.0-rc.1" }
shipper-config = { path = "crates/shipper-config", version = "0.3.0-rc.1" }
shipper-duration = { path = "crates/shipper-duration", version = "0.3.0-rc.1" }
shipper-encrypt = { path = "crates/shipper-encrypt", version = "0.3.0-rc.1" }
shipper-output-sanitizer = { path = "crates/shipper-output-sanitizer", version = "0.3.0-rc.1" }
shipper-registry = { path = "crates/shipper-registry", version = "0.3.0-rc.1" }
shipper-retry = { path = "crates/shipper-retry", version = "0.3.0-rc.1" }
shipper-sparse-index = { path = "crates/shipper-sparse-index", version = "0.3.0-rc.1" }
shipper-types = { path = "crates/shipper-types", version = "0.3.0-rc.1" }
shipper-webhook = { path = "crates/shipper-webhook", version = "0.3.0-rc.1" }

Comment thread crates/shipper/Cargo.toml
Comment on lines +17 to +26
shipper-retry.workspace = true
shipper-encrypt.workspace = true
shipper-registry.workspace = true
shipper-webhook.workspace = true
shipper-types.workspace = true
shipper-config.workspace = true
shipper-duration.workspace = true
shipper-cargo-failure.workspace = true
shipper-sparse-index.workspace = true
shipper-output-sanitizer.workspace = true

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The workspace dependencies in this file are not sorted alphabetically. Sorting them helps maintain consistency across the project and improves maintainability.

Suggested change
shipper-retry.workspace = true
shipper-encrypt.workspace = true
shipper-registry.workspace = true
shipper-webhook.workspace = true
shipper-types.workspace = true
shipper-config.workspace = true
shipper-duration.workspace = true
shipper-cargo-failure.workspace = true
shipper-sparse-index.workspace = true
shipper-output-sanitizer.workspace = true
shipper-cargo-failure.workspace = true
shipper-config.workspace = true
shipper-duration.workspace = true
shipper-encrypt.workspace = true
shipper-output-sanitizer.workspace = true
shipper-registry.workspace = true
shipper-retry.workspace = true
shipper-sparse-index.workspace = true
shipper-types.workspace = true
shipper-webhook.workspace = true

@coderabbitai

coderabbitai Bot commented Apr 15, 2026

Copy link
Copy Markdown

Warning

Rate limit exceeded

@EffortlessSteven has exceeded the limit for the number of commits that can be reviewed per hour. Please wait 13 minutes and 52 seconds before requesting another review.

Your organization is not enrolled in usage-based pricing. Contact your admin to enable usage-based pricing to continue reviews beyond the rate limit, or try again in 13 minutes and 52 seconds.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: e014469b-b5a7-4c39-8637-bcb55b262fb3

📥 Commits

Reviewing files that changed from the base of the PR and between 62f40be and 6f1a1d8.

📒 Files selected for processing (6)
  • Cargo.toml
  • crates/shipper-cli/Cargo.toml
  • crates/shipper-config/Cargo.toml
  • crates/shipper-registry/Cargo.toml
  • crates/shipper-types/Cargo.toml
  • crates/shipper/Cargo.toml
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feature/decrating-phase7-path-version

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

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