2.4 KiB
Releasing
The six crates published from this workspace use one version and must be released in dependency order. The filesystem server, terminal client, and public-API example set publish = false and are never uploaded.
Preconditions
- Work from a clean
masterwhoseHEADmatchesorigin/master. - Confirm the intended version in
[workspace.package]and every internal requirement in[workspace.dependencies]. - Confirm ownership of all six names on crates.io.
- Run the complete repository validation suite:
cargo fmt --all -- --check
cargo check --workspace --all-targets
cargo test --workspace --all-targets
cargo test --workspace --doc
cargo clippy --workspace --all-targets -- -D warnings
RUSTDOCFLAGS='-D warnings' cargo doc --workspace --no-deps
cargo run --package wip-public-api-example
git diff --check
Publish order
Before uploading anything, dry-run the exact public package set together. Cargo uses a temporary local registry for unpublished workspace dependencies during this check:
cargo publish --dry-run --workspace \
--exclude wip-fs-server \
--exclude wip-public-api-example \
--exclude wip-tui
Then dry-run and publish each layer before moving to a crate that depends on it:
cargo publish --dry-run --package wip-protocol
cargo publish --package wip-protocol
cargo publish --dry-run --package wip-interface-macros
cargo publish --package wip-interface-macros
Wait until both versions are available from the crates.io index, then continue:
cargo publish --dry-run --package wip-interface
cargo publish --package wip-interface
cargo publish --dry-run --package wip-http
cargo publish --package wip-http
After those versions are available from the index:
cargo publish --dry-run --package wip-host
cargo publish --package wip-host
cargo publish --dry-run --package wip-client
cargo publish --package wip-client
Registry propagation can take time. A dependent dry-run reporting that a WIP crate is unavailable means the previous publish is not visible in the selected registry yet; do not bypass verification.
Tag
After all six uploads resolve successfully, tag the exact published commit and push the tag:
git tag -a v0.1.0 -m "release: 0.1.0"
git push origin v0.1.0
Do not move or recreate a published version or its tag. Prepare a new version for any subsequent correction.