Render one Object or paired Interface entity without path/context, lookups or wire-schema changes. Preserve declarations, summaries, optional/unit and empty distinctions; validate protocol semantics and bounded input before rendering. Add five spec/nested goldens and 13 external API tests plus a standalone doctest. Validation: cargo fmt --all -- --check; cargo check --workspace --all-targets; cargo test --workspace --all-targets; cargo test --workspace --doc; nix develop -c bash (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. All passed. Default shell lacks clippy; declared Nix dev shell supplied it.
79 lines
2.5 KiB
Markdown
79 lines
2.5 KiB
Markdown
# Releasing
|
|
|
|
The seven public crates in the current workspace (including the unreleased `wip-text-view`) 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 seven 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-text-view
|
|
cargo publish --package wip-text-view
|
|
|
|
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 seven 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.
|