RELEASING.md
This document is the runbook for cutting a go-redis release. It is intended for maintainers with write/tag access to the repository.
For the format and style of the release notes themselves, see .github/RELEASE_NOTES_TEMPLATE.md.
go-redis follows Semantic Versioning:
vX.Y.Z+1) — bug fixes, no API changes.vX.Y+1.0) — backwards-compatible new features, deprecations.vX+1.0.0) — breaking changes. Coordinate with the team first.Pre-releases use vX.Y.Z-beta.N / vX.Y.Z-rc.N.
master and CI is green on the latest commit.CHANGELOG / release notes have been considered; dependabot-only
and doc-only changes are excluded per the template.RELEASE-NOTES.md using
.github/RELEASE_NOTES_TEMPLATE.md
as the format. Keep the file in chronological order (newest first).Create a release branch from master:
git checkout master && git pull --ff-only
git checkout -b release/vX.Y.Z
Run the release script on that branch:
TAG=vX.Y.Z ./scripts/release.sh
What the script does (and explicitly does not do):
TAG matches the semver regex and isn't already a git tag.redis/go-redis* line in every sub-module go.mod to
point at the new TAG. Trailing // indirect markers are preserved.go mod tidy -compat=1.24 in each sub-module.version.go.Review and commit the changes yourself:
git diff # sanity-check the bumps
git add -u
git commit -m "chore: release vX.Y.Z"
git push origin release/vX.Y.Z
Then on GitHub:
release/vX.Y.Z into master.After the release PR is merged, pull the latest master and dry-run the
tagger:
git checkout master && git pull --ff-only
TAG=vX.Y.Z ./scripts/tag.sh vX.Y.Z
The script defaults to dry-run and prints the commands it would run.
Verify the output, then apply for real with -t:
./scripts/tag.sh vX.Y.Z -t
This creates and pushes:
vX.Y.Z.<module>/vX.Y.Z for each public sub-module
(skipping example/* and internal/*).vX.Y.Z and the target to master.RELEASE-NOTES.md for this version.CONTRIBUTING.md).For an urgent fix on top of the latest release:
git checkout -b hotfix/vX.Y.Z+1 vX.Y.Z.TAG=vX.Y.Z+1.master (forward-port if necessary).release.sh fails with "tag already exists" — the tag has already
been created. Pick the next version, or delete the local tag first if
it was created by mistake.tag.sh reports version mismatch in a go.mod — a sub-module was
not updated by release.sh. Fix the go.mod manually (or re-run
release.sh), amend the release PR, and re-run the tagger.version.go does not contain the tag — release.sh did not run or
the bump was reverted. Re-run release.sh on the release branch.https://pkg.go.dev/github.com/redis/go-redis/[email protected] once to trigger
a fetch from the module proxy.