ADR
Generated from docs/development.md in
smbcloud-cli . Edit it there.
This repo uses Architecture Decision Record in the adr folder.
Releasing
Releases are automated via GitHub Actions. The full source of truth for the
release process is the smbcloud-cli-release skill under .agents/skills/ — read
it before cutting a release. The short version:
- Prepare the bump on a
release/v<version>branch with the Makefile:make patch | minor | major | custom VERSION=<version>. Branch offdevelopmentfor a minor or major release. For a patch, branch offmainandgit cherry-pick -xthe fix if it already landed ondevelopment. The Makefile bumps every workspace crate in lockstep, syncs the npm/PyPI/gem manifests and lockfiles, and commitsRelease <version>without tagging. - Push the branch and open a pull request into
development. Once CI is green, merge it with a merge commit. - Sync
mainlocally, with no pull request:git checkout main && git pull && git merge --no-ff <release-pr-merge-commit> && git push origin main. Use the release PR’s merge commit, notdevelopment’s tip, so later features wait for the next release. There is no PR because auto-delete would removedevelopment. - Tag the
mainmerge commit with an annotated tag and push it:git tag -a v<version> -m "v<version>" && git push origin v<version>. - For a patch release, merge
mainback intodevelopmentso the version bump carries over. Delete the release branch.
Pushing the v*.*.* tag triggers .github/workflows/release-crate.yml, which
publishes the workspace crates to crates.io and fans out to the npm, PyPI, NuGet,
and Ruby-gem distribution workflows. You do not publish by hand — the tag push
is the trigger.
A local publish (cargo workspaces publish --publish-as-is) exists only as a
fallback for when CI is unavailable; it is not the normal path. See the
smbcloud-cli-release skill for per-channel details, version-sync rules, and
trusted-publishing setup.