kitup publishes one version across five package surfaces:
- npm:
@kitup/sdk - PyPI:
kitup-sdk - crates.io:
kitup - Go module:
github.com/lathe-cli/kitup/go - Go Cobra adapter:
github.com/lathe-cli/kitup/go-cobra
Start from an up-to-date main branch:
git checkout main
git pull --ff-onlyPrepare the release branch and version commit:
make release-patch
# or
make release-minor
# or
make release-majorThe release target creates release/vX.Y.Z, updates:
ts/package.jsonpython/pyproject.tomlpython/uv.lockexamples/python/uv.lockrust/Cargo.tomlrust/Cargo.lockexamples/rust/Cargo.lockgo-cobra/go.mod
It then runs make check and commits:
chore: prepare vX.Y.Z releaseOpen the release PR manually. After it is merged, tag the merge commit on main manually:
git checkout main
git pull --ff-only
git tag vX.Y.Z
git push origin vX.Y.ZDo not tag the release branch. Do not publish packages by hand during the normal flow.
The release workflow creates go/vX.Y.Z, verifies the Cobra adapter against that published core version, creates go-cobra/vX.Y.Z, publishes npm, PyPI, and crates.io packages, creates the GitHub Release, and runs the public install smoke check. Both Go modules keep the same release version; only their publication steps are ordered by dependency.
npm trusted publishing is configured in the npm package settings. For the first package version, the package settings may not exist yet.
If the workflow cannot create the first npm package, publish the npm package once from a local authenticated npm session:
cd ts
npm publish --access publicThen rerun the failed release workflow. The workflow detects already-published npm, PyPI, and crate versions and skips them.
The release workflow is resumable:
- If npm already has the version, npm publish is skipped.
- If PyPI already has the version, Python build and publish are skipped.
- If crates.io already has the version, crate publish is skipped.
- If
go/vX.Y.Zorgo-cobra/vX.Y.Zalready exists, the workflow verifies that it points at the release commit. - If Cobra verification fails after the core tag is published, rerunning the workflow reuses the verified core tag and does not create the Cobra tag until its declared core dependency passes.
Do not delete and recreate a release tag after any registry has accepted the version unless the tag points at the wrong commit and the recovery plan is explicit.
Run the public install smoke check manually with:
scripts/smoke-release.sh X.Y.ZThe smoke check installs from npm, PyPI (kitup-sdk), crates.io, the public Go module, and the public Go Cobra adapter, then verifies that each SDK can load the default host spec or instantiate its adapter.