shipper 0.3.0-rc.2

Reliable, resumable `cargo publish` for Rust workspaces. Install with `cargo install shipper --locked`.
Documentation
[package]
name = "shipper"
version.workspace = true
edition.workspace = true
license.workspace = true
rust-version.workspace = true
description = "Reliable, resumable `cargo publish` for Rust workspaces. Install with `cargo install shipper --locked`."
readme = "README.md"
documentation = "https://docs.rs/shipper"
homepage = "https://github.com/EffortlessMetrics/shipper"
repository = "https://github.com/EffortlessMetrics/shipper"
keywords = ["cargo", "publish", "workspace", "release", "cli"]
categories = ["command-line-utilities", "development-tools", "development-tools::build-utils"]

# Installable product façade (#95 three-crate split).
#
#   shipper (this crate)       install target + curated lib re-export
#     -> shipper-cli           CLI adapter (clap, subcommands, output)
#          -> shipper-core     engine (plan, preflight, publish, resume)
#
# The `shipper` binary is a three-line forward to `shipper_cli::run()`.
# The library target re-exports `shipper-core`'s public surface so the
# historical `shipper::engine`, `shipper::plan`, etc. paths keep
# resolving for callers that depend on the product name.
#
# The `cli` feature is on by default so `cargo install shipper` works
# out of the box. Library consumers that only want the curated
# `shipper-core` re-export (no `clap`, no `indicatif`) can opt out
# with `shipper = { version = "...", default-features = false }`.
[features]
default = ["cli"]
# Pulls in `shipper-cli` and enables the `[[bin]]` target.
cli = ["dep:shipper-cli"]

[[bin]]
name = "shipper"
path = "src/bin/shipper.rs"
required-features = ["cli"]

[dependencies]
shipper-core.workspace = true
shipper-cli = { workspace = true, optional = true }
anyhow = "1.0.102"

[lints]
workspace = true

[dev-dependencies]
# Integration tests exercise the re-exported surface but also reach
# directly into `shipper-core` (for engine internals like `runtime::`
# that aren't part of the curated façade) and `shipper-types` (for
# constructing fixtures).
shipper-core.workspace = true
shipper-types.workspace = true

tempfile = "3.26.0"
insta = { version = "1.46.3", features = ["yaml"] }
proptest = "1.10.0"
serial_test = "3.4.0"
tiny_http = "0.12.0"
temp-env = "0.3"
console = "0.16.3"
chrono = { version = "0.4.44", features = ["serde"] }
serde = { version = "1.0.228", features = ["derive"] }
serde_json = "1.0.149"