Skip to content

monorelReleases for Go monorepos

Explicit per-PR changesets. Native Go tag conventions. Single and multi-module support.

monorel logo: many incoming rails merging into one

Quick Example

toml
# monorel.toml
[provider]
name = "github"
owner = "acme"
repo = "widget"

[packages."github.com/acme/widget"]
tag_prefix = ""
path       = "."
changelog  = "CHANGELOG.md"

[packages."transports/zerolog"]
tag_prefix = "transports/zerolog"
path       = "transports/zerolog"
changelog  = "transports/zerolog/CHANGELOG.md"
sh
# Author a changeset describing this PR (or run `monorel add` with no
# flags for an interactive picker — useful when bumping multiple
# packages in one changeset).
monorel add --package "transports/zerolog:minor" --message "Adds Lazy() helper."

# Preview the next release locally
monorel plan
# PACKAGE             FROM     BUMP   TO       TAG
# transports/zerolog  v1.6.1   minor  v1.7.0   transports/zerolog/v1.7.0
#
# 1 package(s) to release; 1 changeset(s) consumed.

# Apply: write CHANGELOGs, delete consumed changesets, commit, tag
monorel release
git push --follow-tags

That's the loop. The CI workflow (one file, one step on any of the three supported providers) drives the same flow as an always-open release PR; merging the PR runs the release path and publishes one Release per tag.

monorel runs in production on loglayer-go (multi-module Go monorepo) and on monorel itself. Pair it with GoReleaser for binary builds and Docker image distribution; monorel handles versions, tags, and CHANGELOGs.


monorel is made with ❤️ by Theo Gravity / Disaresta.

Released under the MIT License.