1 # ADR
2
3 This repo uses [Architecture Decision Record](https://github.com/joelparkerhenderson/architecture-decision-record) in the `adr` folder.
4
5 # Releasing
6
7 Releases are **automated** via GitHub Actions. The full source of truth for the
8 release process is the `smbcloud-cli-release` skill under `.agents/skills/` — read
9 it before cutting a release. The short version:
10
11 1. Prepare the bump on a `release/v<version>` branch off `development` with the
12 Makefile — `make patch | minor | major | custom VERSION=<version>`. This bumps
13 every workspace crate in lockstep, syncs the npm/PyPI/gem manifests and
14 lockfiles, and commits `Release <version>`.
15 2. Once CI is green, merge into `development` with `--no-ff`, then tag on
16 `development`: `git tag v<version>`.
17 3. Push both: `git push origin development && git push origin v<version>`.
18
19 Pushing the `v*.*.*` tag triggers `.github/workflows/release-crate.yml`, which
20 publishes the workspace crates to crates.io and fans out to the npm, PyPI, NuGet,
21 and Ruby-gem distribution workflows. **You do not publish by hand** — the tag push
22 is the trigger.
23
24 A local publish (`cargo workspaces publish --publish-as-is`) exists only as a
25 fallback for when CI is unavailable; it is not the normal path. See the
26 `smbcloud-cli-release` skill for per-channel details, version-sync rules, and
27 trusted-publishing setup.