From d3e773023670cd10c0808c9e84dc94636a00f3d2 Mon Sep 17 00:00:00 2001 From: Kacy Fortner Date: Thu, 5 Feb 2026 22:43:18 -0500 Subject: [PATCH] chore: add crates.io publishing and improve release tooling - add keywords and categories to all crates for discoverability - add `make publish` target for crates.io publishing - add `make publish-dry-run` to verify packaging - publishes crates in dependency order with indexing delay usage: make publish-dry-run # verify packaging make publish # publish to crates.io make github-release # create github release --- Cargo.toml | 2 ++ Makefile | 38 ++++++++++++++++++++++++++++- crates/ember-cli/Cargo.toml | 2 ++ crates/ember-cluster/Cargo.toml | 2 ++ crates/ember-core/Cargo.toml | 2 ++ crates/ember-persistence/Cargo.toml | 2 ++ crates/ember-protocol/Cargo.toml | 2 ++ crates/ember-server/Cargo.toml | 2 ++ 8 files changed, 51 insertions(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index 9c935319..17fae066 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -14,6 +14,8 @@ version = "0.1.3" edition = "2021" license = "MIT" repository = "https://github.com/kacy/ember" +keywords = ["cache", "redis", "key-value", "database", "distributed"] +categories = ["caching", "database-implementations"] [workspace.dependencies] # async runtime diff --git a/Makefile b/Makefile index 5b22bfbd..49d50b4f 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,6 @@ .PHONY: build release test fmt fmt-check clippy check clean docker-build \ - release-patch release-minor release-major github-release + release-patch release-minor release-major github-release \ + publish publish-dry-run # extract the workspace version from the root Cargo.toml VERSION = $(shell sed -n 's/^version = "\(.*\)"/\1/p' Cargo.toml) @@ -64,3 +65,38 @@ release-major: github-release: gh release create "v$(VERSION)" --title "v$(VERSION)" --generate-notes + +# --- crates.io publishing --- +# +# usage: +# make publish-dry-run # verify all crates can be packaged +# make publish # publish all crates to crates.io (requires login) +# +# crates are published in dependency order: +# 1. ember-persistence, ember-protocol, ember-cluster (no internal deps) +# 2. emberkv-core (depends on persistence, protocol) +# 3. ember-server (depends on core, protocol, persistence) +# 4. emberkv-cli (standalone) + +CRATES_ORDER = ember-persistence ember-protocol ember-cluster emberkv-core ember-server emberkv-cli + +publish-dry-run: + @echo "dry run: checking all crates can be packaged..." + @for crate in $(CRATES_ORDER); do \ + echo " checking $$crate..."; \ + cargo publish --dry-run -p $$crate || exit 1; \ + done + @echo "all crates passed dry run" + +publish: + @echo "publishing crates to crates.io..." + @echo "note: each crate needs time to index before dependents can be published" + @for crate in $(CRATES_ORDER); do \ + echo ""; \ + echo "publishing $$crate..."; \ + cargo publish -p $$crate || exit 1; \ + echo "waiting for crates.io to index $$crate..."; \ + sleep 30; \ + done + @echo "" + @echo "all crates published successfully" diff --git a/crates/ember-cli/Cargo.toml b/crates/ember-cli/Cargo.toml index cc7b1b94..df36c46d 100644 --- a/crates/ember-cli/Cargo.toml +++ b/crates/ember-cli/Cargo.toml @@ -5,6 +5,8 @@ version.workspace = true edition.workspace = true license.workspace = true repository.workspace = true +keywords.workspace = true +categories.workspace = true readme = "README.md" [[bin]] diff --git a/crates/ember-cluster/Cargo.toml b/crates/ember-cluster/Cargo.toml index 1b8de760..da18950d 100644 --- a/crates/ember-cluster/Cargo.toml +++ b/crates/ember-cluster/Cargo.toml @@ -5,6 +5,8 @@ version.workspace = true edition.workspace = true license.workspace = true repository.workspace = true +keywords.workspace = true +categories.workspace = true readme = "README.md" [dependencies] diff --git a/crates/ember-core/Cargo.toml b/crates/ember-core/Cargo.toml index e6e92dbb..d3cf9760 100644 --- a/crates/ember-core/Cargo.toml +++ b/crates/ember-core/Cargo.toml @@ -5,6 +5,8 @@ version.workspace = true edition.workspace = true license.workspace = true repository.workspace = true +keywords.workspace = true +categories.workspace = true readme = "README.md" [lib] diff --git a/crates/ember-persistence/Cargo.toml b/crates/ember-persistence/Cargo.toml index 888d6be3..f5b22b34 100644 --- a/crates/ember-persistence/Cargo.toml +++ b/crates/ember-persistence/Cargo.toml @@ -5,6 +5,8 @@ version.workspace = true edition.workspace = true license.workspace = true repository.workspace = true +keywords.workspace = true +categories.workspace = true readme = "README.md" [dependencies] diff --git a/crates/ember-protocol/Cargo.toml b/crates/ember-protocol/Cargo.toml index 599fd7db..9b410f69 100644 --- a/crates/ember-protocol/Cargo.toml +++ b/crates/ember-protocol/Cargo.toml @@ -5,6 +5,8 @@ version.workspace = true edition.workspace = true license.workspace = true repository.workspace = true +keywords.workspace = true +categories.workspace = true readme = "README.md" [dependencies] diff --git a/crates/ember-server/Cargo.toml b/crates/ember-server/Cargo.toml index d9dbba9b..3a9c356d 100644 --- a/crates/ember-server/Cargo.toml +++ b/crates/ember-server/Cargo.toml @@ -5,6 +5,8 @@ version.workspace = true edition.workspace = true license.workspace = true repository.workspace = true +keywords.workspace = true +categories.workspace = true readme = "README.md" [dependencies]