Repos that use each other

A repo pins what it takes from another, and the pins are the only record. Renovate moves them when there is a release.

What Pinned in How
charter-lib (a TypeScript Worker) package.json, dependencies The URL of charter-lib-X.Y.Z.tgz on the release vX.Y.Z, version and all
The Go library (a Go Worker) go.mod github.com/joeblew999/charter, at its tag vX.Y.Z, which every release has
The charter command (any repo) mise.toml "github:joeblew999/charter" = "X.Y.Z" (mise use github:joeblew999/charter): the binary on the release vX.Y.Z. In a Go repo, the same version as the library, which charter check holds it to
A Go SDK another project publishes go.mod The module path of its sdk/go, at a commit or a tag
Tools mise.toml Exact versions

Renovate

charter init writes renovate.json, charter’s own. It does nothing until the Renovate app is installed on the repo: the file is its settings, not the bot. Then:

It watches What it does
mise.toml tools, go.mod, package.json Opens a pull request when a pinned project releases (managers mise, gomod, npm)
charter-lib’s release URL in package.json The same, from charter’s releases v*
Minor and patch updates Merges them once the checks pass; a major one waits for a person
charter’s own One pull request for charter, charter-lib and the Go library together

renovate = false in charter.toml’s [github] leaves the file to the repo. Moving to a release by hand: mise use github:joeblew999/charter@X.Y.Z, then charter init; in Go, go get github.com/joeblew999/charter@vX.Y.Z && go mod tidy.

Breaking changes

A contract change that removes or renames an operation, a field or a parameter breaks the SDKs another repo pinned. Before a release, compare the specs with the last one’s: git diff <last tag> -- fern/.