Skip to content

Commit edddde6

Browse files
rustyconoverclaude
andcommitted
docs: document the Maven Central release process
Add a Releasing section: bump version + tag, auto-release (no Portal click), the cross-repo ordering trap (:vgi resolves vgirpc from Maven Central on CI, not the composite — so the pinned vgirpc must be published first; verify with VGI_RPC_JAVA_DIR=/nonexistent), and the two gotchas that cost a release attempt (fatal javadoc doclint; immutable GitHub release tags force a patch bump). Record vgi 0.2.0 -> vgirpc 0.10.2. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
1 parent 71a4cf8 commit edddde6

1 file changed

Lines changed: 48 additions & 3 deletions

File tree

CLAUDE.md

Lines changed: 48 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -179,6 +179,45 @@ Gradle's incremental cache occasionally misses RPC-layer edits — if a
179179
change to `~/Development/vgi-rpc-java/` doesn't show up, run
180180
`./gradlew --refresh-dependencies` or `./gradlew clean`.
181181

182+
## Releasing (Maven Central)
183+
184+
Published: **`farm.query:vgi`** (this repo) and **`farm.query:vgirpc`** /
185+
`vgirpc-oauth` (the sibling). Latest as of 2026-06-13: **vgi 0.2.0 → vgirpc
186+
0.10.2**. To cut a release: bump `version` in `build.gradle.kts`, push, then
187+
create a GitHub Release whose tag is the version (`v0.2.0` for `0.2.0`). The
188+
`release.yml` workflow (trigger: `release: published`) verifies tag == version,
189+
runs tests, and publishes. Both repos now set
190+
`publishToMavenCentral(automaticRelease = true)`, so a release goes **live on
191+
Maven Central with no manual Portal click** once it passes validation (changed
192+
2026-06-13 — was `false`/click-gated through vgi 0.1.0 + vgirpc 0.10.1).
193+
194+
**The cross-repo ordering trap.** The `release.yml` build resolves
195+
`farm.query:vgirpc` from **Maven Central** (the composite is absent on CI —
196+
`VGI_RPC_JAVA_DIR` unset), *not* from source. So **`:vgi` cannot release until
197+
the `vgirpc` version it pins in `vgi/build.gradle.kts` is already published to
198+
Maven Central.** Integration CI hides this (it builds vgirpc from source via the
199+
composite), so green integration ≠ releasable. Before tagging a `:vgi` release,
200+
prove it builds against the *published* vgirpc with the composite disabled:
201+
202+
```bash
203+
VGI_RPC_JAVA_DIR=/nonexistent ./gradlew :vgi:test :vgi:javadoc
204+
```
205+
206+
(Pointing the override at a non-directory forces Maven Central resolution.) If
207+
`:vgi` calls a vgirpc API only on `main` (e.g. `CallContext.cookies()` added
208+
after a release), this fails to compile — publish a new vgirpc first, bump the
209+
pin, then release `:vgi`.
210+
211+
**Two gotchas that cost a release attempt (2026-06-13):**
212+
- **Javadoc doclint is fatal on the publish.** vgirpc's `publishToMavenCentral`
213+
runs `:vgirpc:javadoc`, which **errors** (not warns) on a stale `@param`
214+
(e.g. a renamed parameter). Run `./gradlew :<module>:javadoc` locally first.
215+
(vgi's javadoc only *warns* on missing `@param`, so `:vgi` is laxer — but
216+
check anyway.)
217+
- **GitHub immutable release tags can't be reused.** A failed publish leaves the
218+
release's tag permanently reserved (immutable releases). You can't re-cut the
219+
same version after fixing — **bump the patch** (0.10.1 → 0.10.2) and tag that.
220+
182221
## Conventions
183222

184223
- **Java 25 + `-parameters` is mandatory.** (Bumped from 21 → 25 on
@@ -322,9 +361,15 @@ identically, while upstream's locally-built `unittest` passes):
322361
files), boots the example + versioned + versioned_tables workers each as their
323362
own http server, and deliberately does **not** set
324363
`VGI_REQUIRE_LAUNCHER_TRANSPORT` (so `launcher/options_smoke.test` skips). Green:
325-
**171 test cases / 9043 assertions / 11 skipped**. `VGI_RPC_JAVA_REF` bumped to
326-
`aa40dcb`. (Greening `bearer_token` over http still waits on
327-
`VGI_TEST_BEARER_TOKEN`; the no-auth ATTACH-raises change is PR #2 upstream.)
364+
**171 test cases / 9043 assertions / 11 skipped**. (Greening `bearer_token` over
365+
http still waits on `VGI_TEST_BEARER_TOKEN`; the no-auth ATTACH-raises change is
366+
PR #2 upstream.)
367+
368+
**Released 2026-06-13 — vgi 0.2.0 → vgirpc 0.10.2** (both live on Maven Central;
369+
see the "Releasing" section). vgirpc 0.10.2 carries the six http
370+
state-serialization commits (`815b0fe``aa40dcb`); `:vgi`'s pin in
371+
`vgi/build.gradle.kts` and `integration.yml`'s `VGI_RPC_JAVA_REF` both point at
372+
the 0.10.2 commit (`6a9246e`).
328373

329374
**2026-06-12 — GitHub Actions integration CI + expression-filter pushdown.**
330375
Two coupled pieces landed so the integration suite runs on every push/PR

0 commit comments

Comments
 (0)