chore(release): independent per-crate versioning, first 0.5.0 releases #114

Merged
Lochnair merged 1 commits from chore/independent-crate-versioning into main 2026-08-17 02:32:39 +00:00
Lochnair commented 2026-08-17 02:29:52 +00:00 (Migrated from github.com)

Summary

  • Move all five workspace crates (irtt-proto, irtt-client, irtt-server, irtt-stats, irtt-cli) from lockstep to independently-owned [package] version fields. Each crate keeps its own version explicitly; there is no shared workspace package version. This release happens to assign 0.5.0 to all five, but nothing about the manifests requires that to hold in the future.
  • Add a root CHANGELOG.md with a real, per-crate 0.5.0 section built from archaeology of every merge since v0.4.0 (110 first-parent merges), not a mechanical git log -- crates/<name>/** filter — including cross-crate effects (e.g. irtt-proto/irtt-client changes that materially affect irtt-stats/irtt-cli behavior).
  • Adopt crate-qualified release tags (irtt-proto/v0.5.0, irtt-client/v0.5.0, irtt-server/v0.5.0, irtt-stats/v0.5.0, irtt-cli/v0.5.0), replacing the old ambiguous vX.Y.Z convention.
  • Scope cargo-dist to irtt-cli only via dist-workspace.toml's tag-namespace = "irtt-cli", so only irtt-cli/vX.Y.Z tags trigger the release workflow (dist generate-regenerated as irtt-cli-release.yml). Library-crate tags no longer risk creating an empty/failing GitHub Release or Actions run — verified locally with dist plan --tag=... for both an irtt-cli tag (produces a real release plan) and a library tag (workflow tag-glob no longer matches at all).
  • crates.io publication model unchanged: all five crates were already publishable (no publish = false anywhere); only irtt-cli gets a GitHub binary Release via cargo-dist. irtt-server has never been published to crates.io before — this will be its first release there.
  • Along the way, fixed a real pre-existing bug: dist-workspace.toml still requested --features full, a feature removed from irtt-cli in a recent refactor (90c04b6) without updating the dist config — this was silently breaking every cargo-dist build. Dropped the stale override since default already covers everything.
  • Updated the handful of files that referenced the old .github/workflows/release.yml path by name (renovate.json, actions-security.yml, supply-chain.yml), and rescoped semver.yml's tag trigger to the same five crate-qualified tags so semver checks keep running under the new convention.

Test plan

  • cargo fmt --all -- --check
  • cargo check --workspace --all-targets --all-features --locked
  • cargo test --workspace --all-features --locked (all green, 0 failures)
  • cargo clippy --workspace --all-targets --all-features --locked -- -D warnings
  • cargo check --workspace --no-default-features
  • cargo metadata sanity check (all five crates report 0.5.0, dependency graph as expected: proto ← client/server ← stats ← cli)
  • git diff --check
  • cargo publish --dry-run for each of the five crates (packaging succeeds for all; full verify build succeeds standalone for irtt-proto; dependents can only fully verify once their registry deps are actually published, which is expected and will be exercised at publish time)
  • dist build --tag=irtt-cli/v0.5.0 locally — succeeds, produces all four CLI binaries (irtt-cli, irtt-rs, irtt-server, irtt-tui)
  • dist plan --tag=<crate>/v0.5.0 for all five crates — confirms tag parsing and per-package version matching
  • Confirmed the new tag-glob (irtt-cli**[0-9]+.[0-9]+.[0-9]+*) only matches tags starting with irtt-cli
## Summary - Move all five workspace crates (`irtt-proto`, `irtt-client`, `irtt-server`, `irtt-stats`, `irtt-cli`) from lockstep to independently-owned `[package] version` fields. Each crate keeps its own version explicitly; there is no shared workspace package version. This release happens to assign `0.5.0` to all five, but nothing about the manifests requires that to hold in the future. - Add a root `CHANGELOG.md` with a real, per-crate `0.5.0` section built from archaeology of every merge since `v0.4.0` (110 first-parent merges), not a mechanical `git log -- crates/<name>/**` filter — including cross-crate effects (e.g. `irtt-proto`/`irtt-client` changes that materially affect `irtt-stats`/`irtt-cli` behavior). - Adopt crate-qualified release tags (`irtt-proto/v0.5.0`, `irtt-client/v0.5.0`, `irtt-server/v0.5.0`, `irtt-stats/v0.5.0`, `irtt-cli/v0.5.0`), replacing the old ambiguous `vX.Y.Z` convention. - Scope cargo-dist to `irtt-cli` only via `dist-workspace.toml`'s `tag-namespace = "irtt-cli"`, so only `irtt-cli/vX.Y.Z` tags trigger the release workflow (`dist generate`-regenerated as `irtt-cli-release.yml`). Library-crate tags no longer risk creating an empty/failing GitHub Release or Actions run — verified locally with `dist plan --tag=...` for both an `irtt-cli` tag (produces a real release plan) and a library tag (workflow tag-glob no longer matches at all). - crates.io publication model unchanged: all five crates were already publishable (no `publish = false` anywhere); only `irtt-cli` gets a GitHub binary Release via cargo-dist. `irtt-server` has never been published to crates.io before — this will be its first release there. - Along the way, fixed a real pre-existing bug: `dist-workspace.toml` still requested `--features full`, a feature removed from `irtt-cli` in a recent refactor (`90c04b6`) without updating the dist config — this was silently breaking every cargo-dist build. Dropped the stale override since `default` already covers everything. - Updated the handful of files that referenced the old `.github/workflows/release.yml` path by name (`renovate.json`, `actions-security.yml`, `supply-chain.yml`), and rescoped `semver.yml`'s tag trigger to the same five crate-qualified tags so semver checks keep running under the new convention. ## Test plan - [x] `cargo fmt --all -- --check` - [x] `cargo check --workspace --all-targets --all-features --locked` - [x] `cargo test --workspace --all-features --locked` (all green, 0 failures) - [x] `cargo clippy --workspace --all-targets --all-features --locked -- -D warnings` - [x] `cargo check --workspace --no-default-features` - [x] `cargo metadata` sanity check (all five crates report 0.5.0, dependency graph as expected: proto ← client/server ← stats ← cli) - [x] `git diff --check` - [x] `cargo publish --dry-run` for each of the five crates (packaging succeeds for all; full verify build succeeds standalone for `irtt-proto`; dependents can only fully verify once their registry deps are actually published, which is expected and will be exercised at publish time) - [x] `dist build --tag=irtt-cli/v0.5.0` locally — succeeds, produces all four CLI binaries (`irtt-cli`, `irtt-rs`, `irtt-server`, `irtt-tui`) - [x] `dist plan --tag=<crate>/v0.5.0` for all five crates — confirms tag parsing and per-package version matching - [x] Confirmed the new tag-glob (`irtt-cli**[0-9]+.[0-9]+.[0-9]+*`) only matches tags starting with `irtt-cli`
chatgpt-codex-connector[bot] commented 2026-08-17 02:29:57 +00:00 (Migrated from github.com)

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.
To continue using code reviews, you can upgrade your account or add credits to your account and enable them for code reviews in your settings.

You have reached your Codex usage limits for code reviews. You can see your limits in the [Codex usage dashboard](https://chatgpt.com/codex/cloud/settings/usage). To continue using code reviews, you can upgrade your account or add credits to your account and enable them for code reviews in your [settings](https://chatgpt.com/codex/cloud/settings/code-review).
Sign in to join this conversation.