A CLI for managing changesets, versions, changelogs, and GitHub releases in Go workspaces (monorepos). Inspired by @changesets/cli.
go install github.com/jakoblorz/go-changesets/cmd/changeset@latest- A Go workspace with a
go.workat the repo root - One or more Go modules referenced via
go.work use
- Add a changeset
changeset
# or
changeset add- Apply changesets to a project (bumps version + updates changelog)
changeset version --project <project>- Publish a GitHub release (creates git tag + GitHub release)
export GITHUB_TOKEN=...
changeset publish --project <project> --owner <org> --repo <repo>Run commands per project with filters:
# Version all projects that have pending changesets
changeset each --filter=open-changesets -- changeset version
# Publish all projects where the local version is newer than the latest tag
changeset each --filter=outdated-versions -- \
changeset publish --owner <org> --repo <repo>Extended guides live in docs/:
docs/01_intro-to-using-changesets.mdxdocs/02_adding-a-changeset.mdxdocs/03_changeset-groups.mdxdocs/04_snapshotting.mdxdocs/05_github-integration.mdxdocs/06_concepts.mdxdocs/07_cli-reference.mdx
- Business logic is separated from IO via mockable interfaces:
internal/filesystem.FileSysteminternal/git.GitClientinternal/github.GitHubClient
- Core domain types live in
internal/models. - CLI is handling imperative flow:
internal/cli
go test ./...E2E tests:
go test ./test/e2e/... -vA complete demo monorepo lives in kitchensink/.
MIT