This is the ordering a release must follow. The mechanics (GPG, bundle layout, Central
upload) live in PUBLISHING.md; this document exists to pin the one rule an
external review caught us breaking (#3084, de-slop epic #3083):
Never advertise a version that isn't resolvable on Maven Central yet.
0.7.2 shipped with the README quickstart and the Gradle version both reading 0.7.2 while Central
still served 0.7.1 — the signed bundle had been built but not uploaded. A consumer copy-pasting
the quickstart got an unresolvable dependency. The steps below make that ordering explicit and
add a final automated gate.
- Bump
versioninbuild.gradle.kts. Do not touch the README version snippet yet. - Build & verify locally:
./gradlew build(full suite + detekt). For hosted-API tests that need a provider key, see thelive-cloud-apinote in the build file. - Build the signed bundle (see
PUBLISHING.md→ Build & Bundle). Confirm the GPG signature and that the zip's Maven path isai/deep-code/agents-kt/<version>/…with nomaven-metadata. - Upload via the Central Portal and click Publish (
PUBLISHING.md→ Upload to Central Portal). Propagation torepo1.maven.orgtakes ~10–30 min. - Gate — confirm it's resolvable. This is the step that was skipped:
It HEADs
./gradlew checkPublishedVersion
ai.deep-code:agents-ktandagents-kt-kspat the current project version on Central and fails unless both return HTTP 200. It is not part ofcheck(it needs network and would fail on an unreleased version during normal dev) — run it manually here, as the last gate before anything user-facing names the new version. Override the base URL for a mirror with-PcentralBaseUrl=…. - Only now bump the README dependency snippet to the new version (and any other user-facing
docs / announcements).
checkReadmeVersion(wired intocheck, #2873) keeps the README and the Gradle version in lockstep from this point on. - Tag the release (annotated; use
git tag -a --cleanup=verbatim -F <file>if the message carries#issue-reflines) and push. - Immediately bump
mainto the next-SNAPSHOT(mechanically enforced — #4428: CI runscheckSnapshotPolicyon every push tomainand fails when a non--SNAPSHOTversion is not the tagged release commit itself; release-PR CI is exempt by ref.) (0.7.24released →version = "0.7.25-SNAPSHOT"). Leave the README snippet at the just-published version. This keeps post-release commits from masquerading under the released version's identity:mainis always either exactly a published release (the tagged commit) or visibly-SNAPSHOT.checkReadmeVersionunderstands this state — on a-SNAPSHOTversion it requires the README to advertise a plain release version strictly below the snapshot base, and exact lockstep resumes at step 6 of the next release.
| Guard | When | Catches |
|---|---|---|
checkReadmeVersion (#2873) |
every check |
README version ≠ Gradle version (release); README advertising a -SNAPSHOT or a version ≥ the snapshot base (dev) |
checkPublishedVersion (#3084) |
manual, step 5 | Gradle/advertised version not yet on Central |
The first stops the README from drifting from the build; the second stops the build (and therefore the README, once step 6 runs) from advertising a version the world can't download. Together they close the gap the review flagged: the advertised version is always one Maven can actually resolve.