Files
wip-rs/RELEASING.md

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

  1. Work from a clean master whose HEAD matches origin/master.
  2. Confirm the intended version in [workspace.package] and every internal requirement in [workspace.dependencies].
  3. Confirm ownership of all six names on crates.io.
  4. 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.