1 file changed
+20
-1
.agents/skills/smbcloud-cli-release/SKILL.md
+20
-1
@@ -19,6 +19,7 @@ Use this skill when work touches any part of the smbCloud CLI distribution flow:
19
Use these files as the release source of truth:
20
21
- Rust crate version and binary name: `crates/cli/Cargo.toml`
22
+- Workspace crate dependency versions: `Cargo.toml` under `[workspace.dependencies]`
23
- SDK WASM crate version: `crates/smbcloud-auth-sdk-wasm/Cargo.toml`
24
- SDK npm package version: `sdk/npm/smbcloud-auth/package.json`
25
- SDK npm build script: `sdk/npm/smbcloud-auth/prepare-package.mjs`
@@ -27,6 +28,8 @@ Use these files as the release source of truth:
28
- npm platform package generator: `npm/scripts/render-platform-package.cjs`
29
- npm wrapper package generator: `npm/scripts/render-main-package.cjs`
30
- npm wrapper launcher: `npm/smbcloud-cli/src/index.ts`
31
+- npm wrapper committed package metadata: `npm/smbcloud-cli/package.json`
32
+- npm wrapper committed lockfile: `npm/smbcloud-cli/package-lock.json`
33
- PyPI package metadata: `pypi/pyproject.toml`
34
- PyPI package README: `pypi/README.md`
35
- SDK PyPI package metadata: `sdk/python/pyproject.toml`
@@ -39,8 +42,16 @@ Use these files as the release source of truth:
42
43
The SDK npm package `@smbcloud/sdk-auth` must have its version in `sdk/npm/smbcloud-auth/package.json` match the version in `crates/smbcloud-auth-sdk-wasm/Cargo.toml` exactly. The `prepare-package.mjs` script enforces this at build time and will fail CI if they diverge.
44
45
+When bumping workspace crate versions for a release, also update the version constraints in the root `Cargo.toml` under `[workspace.dependencies]` so every `smbcloud-*` path dependency points at the same release version.
46
+
47
When bumping workspace crate versions for a release, always update `sdk/npm/smbcloud-auth/package.json` in the same commit.
48
49
+The npm wrapper package is generated, but its checked-in files still need to match the release version before tagging:
50
+
51
+- rerender `npm/smbcloud-cli/package.json` with `node ../scripts/render-main-package.cjs ./package.json <version>`
52
+- refresh `npm/smbcloud-cli/package-lock.json` with `npm install`
53
+- commit both files so CI and local packaging agree on the wrapper version and optional dependency versions
54
+
55
The same applies to the Ruby gems in `sdk/gems/`. For each gem (`auth`, `model`):
56
57
- `lib/<gem>/version.rb` — the gem version constant
@@ -66,9 +77,16 @@ Workflow:
77
If a tag was placed on the wrong commit (e.g. before a last-minute fix), move it:
78
79
1. Merge the fix into `development`.
69
-2. Force-move the tag: `git tag -f v<version>`.
80
+2. Recreate the annotated tag on the correct commit: `git tag -fa v<version> -m "v<version>"`.
81
3. Force-push the tag: `git push origin v<version> --force`.
82
83
+When verifying the remote tag, remember that annotated tags have two refs. `git ls-remote --tags origin refs/tags/v<version>*` should show:
84
+
85
+- `refs/tags/v<version>` — the tag object
86
+- `refs/tags/v<version>^{}` — the peeled commit
87
+
88
+The peeled `^{}` ref is the one that must match the intended release commit.
89
+
90
The `release-crate.yml` orchestrator triggers on `push.tags: "v*.*.*"`, so the force-push will re-trigger the full release chain.
91
92
## Release model
@@ -109,6 +127,7 @@ It is built from `pypi/pyproject.toml` with `maturin` and `bindings = "bin"`, so
127
1. Confirm npm auth with `npm whoami`.
128
2. Confirm the crate version in `crates/cli/Cargo.toml`.
129
3. Use the same version string for every npm package in that release.
130
+4. Rerender `npm/smbcloud-cli/package.json` and refresh `npm/smbcloud-cli/package-lock.json` before tagging if the wrapper version changed.
131
132
### Build platform binaries
133