Releasing crates
The workspace publishes in dependency order: hallouminate-domain, then
hallouminate-adapters, then hallouminate-config, then hallouminate-daemon,
then hallouminate.
One-time bootstrap for new crates
crates.io cannot configure a trusted publisher until a crate has its first
release. Any crate that has never been published — currently
hallouminate-config and hallouminate-daemon — must be bootstrapped once
before the first workspace tag that ships it:
- Create a crates.io token allowed to publish new crates.
- Add it temporarily as the repository secret
CRATES_IO_TOKEN. - Run the publish-crates workflow manually with
bootstrap=true. The workflow walks the library crates in dependency order (hallouminate-domain,hallouminate-adapters,hallouminate-config,hallouminate-daemon), waiting for the sparse index between each, and publishes only the ones missing at the current workspace version. - In crates.io settings for each newly published crate
(
hallouminate-config,hallouminate-daemon), add this trusted publisher: repositorypaulnsorensen/hallouminate, workflowpublish-crates.yml. (hallouminate-domain,hallouminate-adapters, andhallouminatealready have theirs from the initial bootstrap.) - Delete the
CRATES_IO_TOKENrepository secret.
After bootstrap, push the version tag normally. Tagged releases authenticate only through crates.io Trusted Publishing, check each crate’s exact version on the sparse index, and publish only missing crates in dependency order. This makes a tag safe when the bootstrap already published the new crates at that workspace version.