Release Process
May 11, 2026 ยท View on GitHub
Versioning
release.sh keeps two files in sync:
version/version.gocmd/ipfs-cluster-ctl/main.go
Tags are signed: vX.Y.Z for finals, vX.Y.Z-rcN for release candidates.
Prerequisites
- Push access to
master. - A GPG key for signing commits and tags.
- Local
masterup to date.
Steps
-
Land a
CHANGELOG.mdPR from avX.Y.Z/changelogbranch. -
On
master, run./release.sh X.Y.Z. The script bumps both version files, signs the release commit, and creates a signed annotated tag. -
Run
git show vX.Y.Zand confirm the GPG signature and tag annotation look right. -
Push commit and tag explicitly (never
git push --tags):git push origin master git push origin vX.Y.Z -
Wait for the
docker-imageworkflow to publishvX.Y.Z,stable, andlatestto Docker Hub. -
Create a GitHub Release for the tag (web UI or
gh release create vX.Y.Z) and paste the newCHANGELOG.mdentry as the body. -
Close the
Release vX.Y.Zmilestone and openRelease vX.Y.(Z+1). -
Open a PR against
ipfs/distributionsto publish binaries ondist.ipfs.tech(see ipfs/distributions#1188 as a template).
Release candidates
Major releases usually go through one or more RCs (v1.0.0 had five). Patch releases skip them. Run ./release.sh X.Y.Z-rcN, then push the commit and tag the same way. CI publishes only the vX.Y.Z-rcN tag to Docker Hub and does not move stable or latest. Open a separate ipfs/distributions PR for the RC.
Notes
release.shrunsmake cleanbefore editing files.- The tag annotation comes from
git log <lastver>..HEAD, so messy commits surface on the GitHub Release page. Keepmastertidy. - Never
git push --tags: it pushes every local tag, including stale ones. Push the branch and the new tag explicitly:git push origin masterfollowed bygit push origin vX.Y.Z.