Skip to content

Commit 0e24c42

Browse files
andrei-balintclaude
andcommitted
docs: skill version scheme is v<epoch+height>
Update SKILL.md to describe the version as N = base tag epoch + MinVer height (e.g. 1.9.1-v5 + height 1 -> v6), replacing the earlier height-only wording. Note that re-tagging at the current v<N> is seamless, and record why height-only produced v1 after a merge (MinVer height is the shortest graph distance to the tag). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
1 parent 0fdcca5 commit 0e24c42

1 file changed

Lines changed: 19 additions & 18 deletions

File tree

  • .claude/skills/release-libgit2-natives

.claude/skills/release-libgit2-natives/SKILL.md

Lines changed: 19 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -115,8 +115,8 @@ gh run watch <run-id> --repo UiPath/libgit2sharp.nativebinaries --exit-status
115115

116116
It fetches + SHA256-verifies the deps (no OpenSSL/libssh2 compile), builds libgit2 for all 6 RIDs,
117117
assembles `natives-<version>.zip`, and — because `publish=true` (or on `develop`) — publishes Release
118-
**`natives-<version>`**. `<version>` comes from **MinVer** on the nativebinaries repo, collapsed to a
119-
single auto number `X.Y.Z-v<height>` (base tag `1.9.1-v5` + height 21`1.9.1-v21`; see Reference).
118+
**`natives-<version>`**. `<version>` comes from **MinVer** on the nativebinaries repo, reformatted to a
119+
single auto number `X.Y.Z-v<epoch+height>` (base tag `1.9.1-v5` + height 1`1.9.1-v6`; see Reference).
120120
Find the exact tag:
121121

122122
```bash
@@ -141,17 +141,17 @@ windows/ubuntu/macos, and the user reviews and merges.
141141

142142
## Step 3 — Ship the managed package (the very last step)
143143

144-
**Versioning — nothing to do.** The package version is `X.Y.Z-v<height>` (e.g. `1.9.1-v22`), a single
145-
auto-incrementing number. `<height>` is MinVer's commit count since the base tag, surfaced as `v<N>`
146-
by the managed repo's `AdjustVersions` target and the nativebinaries `build.yml` "Resolve version"
147-
step (both collapse MinVer's `<epoch>.<height>` into one `v<height>`). Every develop commit yields the
148-
next `v<N>` — no manual version tagging.
144+
**Versioning — nothing to do.** The package version is `X.Y.Z-v<N>` (e.g. `1.9.1-v6`), a single auto
145+
number where **`N = the base tag's epoch + the MinVer height`**. The base tag `1.9.1-v5` sets the epoch
146+
(5) and each commit past it increments N (v6, v7, …), computed by the managed repo's `AdjustVersions`
147+
target and the nativebinaries `build.yml` "Resolve version" step. Every develop commit yields the next
148+
`v<N>` — no manual version tagging.
149149

150-
**Iron rule:** the existing `X.Y.Z-vN` tag (e.g. `1.9.1-v5`) is a **permanent counting anchor**. Do
151-
**not** cut another `-vN` tag on the same `X.Y.Z` line — the height (hence `v<N>`) would reset and the
152-
package version would regress, which NuGet forbids (versions must rise). Cut a new base tag **only**
153-
when the upstream base changes, once (e.g. `git tag 1.10.0-v0`), to start a fresh line. Same scheme
154-
and anchor tag apply to the nativebinaries repo.
150+
**Re-tagging is seamless** (unlike a height-only scheme). Because `N = epoch + height`, on the tag
151+
commit itself height is 0, so `v<N>` equals the tag — cutting a new tag at the **current** `v<N>` (e.g.
152+
`git tag 1.9.1-v20` when the version already reads `v20`) just re-bases the epoch with no jump, and the
153+
number keeps climbing. Only pitfall: never tag **below** the current `v<N>`, or the version goes
154+
backwards (NuGet forbids). New upstream base → `git tag X.Y.Z-v0`. Same scheme in the nativebinaries repo.
155155

156156
**Publishing to the uipath-internal feed — done interactively from here** (like the gates: there is
157157
no CI publish job). Once the Gate B PR is merged to `develop` and CI is green, get the
@@ -175,7 +175,7 @@ NuGetPackageSourceCredentials_uipath-internal="Username=az;Password=$TOKEN" \
175175

176176
`--api-key`/`-ApiKey` is a required-but-ignored dummy (auth is the token / credential provider, not the
177177
key). `--skip-duplicate` keeps it idempotent — and matters here: the feed may already hold a
178-
manually-published `1.9.1-v5`, so the emitted `X.Y.Z-v<height>` must **exceed** the highest version
178+
manually-published `1.9.1-v5`, so the emitted `X.Y.Z-v<N>` must **exceed** the highest version
179179
already on the feed (see the version-collision caveat). Human-run step — confirm the exact version with
180180
the user before pushing. Only if the upstream base changed: `git tag X.Y.Z-v0` once, first.
181181

@@ -189,11 +189,12 @@ the user before pushing. Only if the upstream base changed: `git tag X.Y.Z-v0` o
189189
- `natives.lock.json` (this repo): `{ repo, tag, filename, url, sha256 }`, one archive; `filename` is
190190
always `<tag>.zip`.
191191

192-
**MinVer** — both repos use **bare numeric base tags** (no `v` prefix) with
193-
`--default-pre-release-identifiers preview.0`. MinVer emits `X.Y.Z-<epoch>.<height>` (e.g.
194-
`1.9.1-v5.22`); both repos then **collapse it to `X.Y.Z-v<height>`** (e.g. `1.9.1-v22`) — a single
195-
monotonic auto number. The base tag (`1.9.1-v5`) is a permanent anchor; never re-tag the line (Step
196-
3's iron rule). New upstream base → one fresh `X.Y.Z-v0` tag.
192+
**MinVer** — both repos use `X.Y.Z-vN` base tags with `--default-pre-release-identifiers preview.0`.
193+
MinVer emits `X.Y.Z-v<epoch>.<height>` (e.g. `1.9.1-v5.1`); both repos reformat to
194+
**`X.Y.Z-v<epoch+height>`** (e.g. `1.9.1-v6`) — a single auto number that continues from the tag.
195+
MinVer's height is the *shortest graph distance* to the tag, so it stays small after a merge (the base
196+
tag often lands on the merge commit's first parent — that's why a naive height-only scheme wrongly
197+
produced `v1`); epoch+height keeps climbing regardless. New upstream base → `git tag X.Y.Z-v0`.
197198

198199
**Release gating**`build.yml`'s publish step is gated on `inputs.publish || github.ref ==
199200
refs/heads/develop`. PR/branch runs without `publish=true` produce only a workflow artifact (no stray

0 commit comments

Comments
 (0)