Conversation
The simplest job in the publish family because Go has no central
registry. Modules pull straight from VCS via tag, so once
`tag-all` pushes `sdk/go/v<V>` (the slash-bearing submodule tag
Go modules require for path `github.com/joaoh82/rust_sqlite/sdk/go`),
`go get …@vX.Y.Z` works the moment proxy.golang.org's cache
catches up.
What the publish-go job actually does:
1. Verifies `tag-all` pushed `sdk/go/v<V>` (cheap consistency
check — if upstream broke, fail loudly)
2. Downloads the per-platform `libsqlrite_c-*.tar.gz` tarballs
that publish-ffi already uploaded to the
`sqlrite-ffi-v<V>` release (via `gh release download`)
3. Re-attaches them to a fresh Go GitHub Release at the
`sdk/go/v<V>` tag, so Go users have one page with both the
`go get` instructions AND the cgo dependency tarballs
Release body documents the cgo wiring per platform
(`CGO_CFLAGS`, `CGO_LDFLAGS`, `LD_LIBRARY_PATH` /
`DYLD_LIBRARY_PATH` / `%PATH%`) so users can extract a tarball
and build immediately without spelunking through the Rust
toolchain instructions in the FFI README.
Tag-with-slashes design choice: Go submodule tag convention is
`<subpath>/vX.Y.Z` for module-paths-with-subpaths. We use
`sdk/go/v<V>` (slashes intact). softprops/action-gh-release
handles the slash-bearing tag fine; the URL in the umbrella
release body uses URL-encoded `sdk%2Fgo%2Fv<V>` for the link.
Wiring:
- tag-all → pushes `sdk/go/v<V>`
- finalize.needs → extended with publish-go
- umbrella release body → 🐹 Go SDK entry
Docs:
- docs/roadmap.md — Phase 6i marked done with the design
rationale captured + a closing note that Phase 6 is now
complete end-to-end
- sdk/go/README.md — installation paragraph updated to
reflect that prebuilt FFI tarballs ship on every release
(was: "Phase 6e will publish prebuilt binaries")
- root README.md — checkbox flipped + summary line for 6i
Test plan after merge: dispatch v0.1.9 canary. publish-go has
no auth complexity (no registry, no OIDC, no tokens), so the
only failure modes are (a) tag-all upstream broke, or (b) the
sqlrite-ffi-v<V> release doesn't have the expected tarballs.
Both surface clearly in the verify-tag-exists step or the
gh-release-download step's output.
After this, **Phase 6 is complete** — every product distribution
channel (Rust crate, C FFI, desktop installer, Python wheel,
Node.js binding, WASM, Go module) ships on every release with
one human action (Release PR review + merge).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
3 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
The simplest job in the publish family — Go has no central registry, so this is just orchestration on top of
tag-all+publish-ffi.publish-gosdk/go/v<V>tag exists; download FFI tarballs fromsqlrite-ffi-v<V>release; create Go GitHub Release with the tarballs re-attached + cgo wiring docsWhy it's so small
Go modules pull straight from VCS. The moment
tag-allpushessdk/go/v0.1.X,go get github.com/joaoh82/rust_sqlite/sdk/go@v0.1.Xworks (modulo proxy.golang.org cache lag). There's nocargo publish/npm publish/pip uploadequivalent — the tag IS the publish event.What
publish-goadds on top of that:tag-alldid its job (cheap; fails loudly if upstream broke).publish-ffi's release so Go users get the cgo dependency on the same page as thego getinstructions.CGO_CFLAGS,CGO_LDFLAGS, per-platform library path).Tag-with-slashes
Go submodule tag convention requires
<subpath>/vX.Y.Zfor module paths with subpaths. Our path isgithub.com/joaoh82/rust_sqlite/sdk/go, so the canonical tag issdk/go/v<V>with slashes intact.softprops/action-gh-releasehandles this fine; the umbrella release body uses URL-encodedsdk%2Fgo%2Fv<V>for the link.Wiring
tag-all→ addssdk/go/v<V>to TAGS arrayfinalize.needs→ extended withpublish-goTest plan
go get github.com/joaoh82/rust_sqlite/sdk/go@v0.1.9from a fresh module to verify the proxy.golang.org caching works as expected.What this completes
Phase 6 done end-to-end. Every product distribution channel ships on every release with one human action (Release PR review + merge):
sqlrite-v<V>sqlrite-engine) + GitHub Releasesqlrite-ffi-v<V>sqlrite-desktop-v<V>sqlrite-py-v<V>sqlrite) + GitHub Releasesqlrite-node-v<V>@joaoh82/sqlrite) + GitHub Releasesqlrite-wasm-v<V>@joaoh82/sqlrite-wasm) + GitHub Releasesdk/go/v<V>v<V>Phase 7 (AI-era extensions) is next, on a fresh branch.
🤖 Generated with Claude Code