Skip to content

Publish to crates.io as zudb, from a tag - #786

Merged
tamnd merged 4 commits into
mainfrom
crates-io-release
Oct 1, 2026
Merged

tamnd merged 4 commits into
mainfrom
crates-io-release

Conversation

@tamnd

@tamnd tamnd commented Oct 1, 2026

Copy link
Copy Markdown
Owner

Makes a v* tag publish the workspace to crates.io and create the GitHub release.

Names. zu is taken on crates.io, so packages become zudb / zudb-* (as docs/00-overview.md already says). Libraries keep their zu_* names via [lib] name and package = renames in [workspace.dependencies], so source outside crates/zu is unchanged. crates/zu's lib is zudb, matching use zudb::... in the README. -p zu* references in CI/scripts/docs are updated.

Published (14): zudb, zudb-common, -encoding, -storage, -vector, -zu1, -sqlite, -s3, -query, -exec, -arrow, -json, -corpus, zudb-cli (installs zu). Everything else stays publish = false. Internal pins are exact =0.0.1.

Release workflow

  • verify: tag == workspace version, CHANGELOG.md has the section, cargo publish --workspace --locked --dry-run. Nothing uploads until this passes.
  • crates-io: scripts/publish-crates.sh (from tamnd/rudb) reads the sparse index, excludes what is up, and waits out the rate limits (new crate: 5 burst then 1/10 min; ~90 min for the first release). Re-running finishes a partial release. Stops cleanly on the 20/day cap.
  • publish: GitHub release with the CHANGELOG section as notes, after crates.io, with build provenance. Rehearsals (workflow_dispatch) upload nothing.

Secrets. CARGO_REGISTRY_TOKEN is a secret of the crates-io environment (deployable only from v* tags), not a repo secret. It is exposed to one step and never printed.

CI. New package job runs the publish dry run on every PR. The semver gate skips when the baseline has no zudb package (only this PR).

See docs/releasing.md.

tamnd added 4 commits October 1, 2026 09:25
The crate name zu is taken on crates.io, so every crate that goes up is
zudb or zudb-*, which is what the overview already promised. The
packages are renamed and the libraries are not: the workspace table
names each one under its old key with `package = "zudb-..."`, and the
inner crates keep `[lib] name = "zu_..."`, so no source outside the
engine crate changes. The engine crate's library is zudb because that
is what `use zudb::Database` in the README needs, so its own tests,
benches and doctests say zudb.

Fourteen crates are published: zudb, the twelve under it that it or the
CLI reaches, and zudb-cli, which installs the zu binary. The internal
pins are exact, so a version bump that misses one fails to resolve
rather than publishing against the previous release.

The release workflow gains three real steps. verify checks the tag
against the workspace and the changelog and runs a full publish dry
run, so a crate that does not build from its tarball stops the release
before anything is uploaded. crates-io runs scripts/publish-crates.sh,
which is rudb's: it asks the index what is up, excludes it, and waits
out the new crate limit, so the first release is about an hour and a
half once and a re-run finishes a partial one. The GitHub release is
created after crates.io, with the changelog section as its notes and
provenance on the archives.

The token is a secret of the crates-io environment, which only a v*
tag can deploy to, and sits in the environment of one step. CI gains a
package job running the same dry run on every pull request.

The rustdoc model keeps calling the engine crate zu, so model.json does
not move. The semver gate skips a baseline that has no zudb package,
which is only this change.
A feature on the command line is spelled package/feature, and the package is zudb-cli.
It is outside the workspace, so it names each package itself rather than through the workspace table.
#785 made zu1::props::fixed_octets public without regenerating docs/api/model.json, which is why api-model is red on main.
@tamnd
tamnd merged commit df433cf into main Oct 1, 2026
43 checks passed
@tamnd
tamnd deleted the crates-io-release branch October 1, 2026 04:56
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant