76 lines
2.4 KiB
Markdown
76 lines
2.4 KiB
Markdown
# 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:
|
|
|
|
```console
|
|
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:
|
|
|
|
```console
|
|
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:
|
|
|
|
```console
|
|
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:
|
|
|
|
```console
|
|
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:
|
|
|
|
```console
|
|
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:
|
|
|
|
```console
|
|
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.
|