mirror of
https://github.com/ipfs/kubo.git
synced 2026-02-21 10:27:46 +08:00
- front-load verbs in checklist items (action before location) - tighten warning text with clear rationale (GPG signatures, audit trail) - fix passive voice, cut filler phrases - clarify version.go conflict resolution during merge-back
9.0 KiB
9.0 KiB
✅ Release Checklist (vX.Y.Z[-rcN])
Release types: RC (Release Candidate) | FINAL | PATCH
Prerequisites
- GPG signature configured in local git and GitHub
- Docker installed on your system
- npm installed on your system
- kubo repository cloned locally
- non-PATCH: Upgrade Go in CI to latest patch from https://go.dev/dl/
1. Prepare Release Branch
- Fetch latest changes:
git fetch origin master release - Create branch
release-vX.Y.Z(base from:masterif Z=0 for new minor/major,releaseif Z>0 for patch) - RC1 only: Switch to
masterbranch and prepare for next release cycle:- Update version.go to
vX.Y+1.0-dev(⚠️ double-check Y+1 is correct) (example PR) - Create
./docs/changelogs/vX.Y+1.mdand add link in CHANGELOG.md
- Update version.go to
- Switch to
release-vX.Y.Zbranch and update version.go tovX.Y.Z(-rcN)(⚠️ double-check Y matches release) (example) - Create draft PR:
release-vX.Y.Z→release(example) - Cherry-pick commits from
masterintorelease-vX.Y.Z:git cherry-pick -x <commit>(example)- ⚠️ NOTE:
-xflag records original commit SHA for traceability and cleaner merge history
- ⚠️ NOTE:
- Verify all CI checks on the PR are passing
- FINAL only: Replace
ChangelogandContributorssections inrelease-vX.Y.Zwith./bin/mkreleaselogstdout (do NOT copy stderr) - FINAL only: Merge PR (
release-vX.Y.Z→release) usingCreate a merge commit- ⚠️ do NOT use
Squash and mergenorRebase and merge-- we want the releaser's GPG signature on the merge commit - ⚠️ do NOT delete the
release-vX.Y.Zbranch (needed for future patch releases and git history)
- ⚠️ do NOT use
2. Tag & Publish
Create Tag
⚠️ POINT OF NO RETURN: Once pushed, tags trigger automatic Docker/NPM publishing and are irreversible! If you're making a release for the first time, do pair programming and have the release reviewer verify all commands.
- RC: From
release-vX.Y.Zbranch:git tag -s vX.Y.Z-rcN -m 'Prerelease X.Y.Z-rcN' - FINAL: After PR merge, from
releasebranch:git tag -s vX.Y.Z -m 'Release X.Y.Z' - ⚠️ Verify tag is signed and correct:
git show vX.Y.Z(-rcN) - Push tag:
git push origin vX.Y.Z(-rcN)- ⚠️ do NOT use
git push --tags(pushes all local tags, polluting the repo with noise)
- ⚠️ do NOT use
- STOP: Wait for Docker build to complete before proceeding
Publish Artifacts
Parallelism: Docker and dist.ipfs.tech only depend on the pushed tag and can be started in parallel. NPM and GitHub Release both depend on dist.ipfs.tech completing first.
- Docker: Verify docker-image CI passed and image is available on Docker Hub → tags
- dist.ipfs.tech: Publish to dist.ipfs.tech
- Check out ipfs/distributions
- Create branch:
git checkout -b release-kubo-X.Y.Z(-rcN) - Verify
.tool-versionsgolang matches Kubo's CIgo-version:(update if needed) - Run:
./dist.sh add-version kubo vX.Y.Z(-rcN)(usage) - Create and merge PR (updates
dists/kubo/versions, FINAL also updatesdists/kubo/current- example) - Wait for CI workflow triggered by merge
- Verify release on dist.ipfs.tech
- NPM: Publish to NPM
- Manually dispatch Release to npm workflow if not auto-triggered
- Verify release on NPM
- GitHub Release: Publish to GitHub
- Create release (RC example, FINAL example)
- Use tag
vX.Y.Z(-rcN) - Link to release issue
- RC: Link to changelog, check
This is a pre-release - FINAL: Copy changelog content (without header), do NOT check pre-release
- Run sync-release-assets workflow (requires dist.ipfs.tech)
- Verify assets are attached to the GitHub release
3. Post-Release
Technical Tasks
- FINAL only: Merge
release→master- Create branch
merge-release-vX.Y.Zfromrelease - Merge
mastertomerge-release-vX.Y.Zfirst, and resolve conflict inversion.go- ⚠️ NOTE: keep the
-devversion frommasterin version.go, discard version fromrelease
- ⚠️ NOTE: keep the
- Create and merge PR from
merge-release-vX.Y.ZtomasterusingCreate a merge commit- ⚠️ do NOT use
Squash and mergenorRebase and merge-- onlyCreate a merge commitpreserves commit history and audit trail of what was merged where
- ⚠️ do NOT use
- Create branch
- Update ipshipyard/waterworks-infra
- Update Kubo staging environment (Running Kubo tests on staging)
- RC: Test last release against current RC
- FINAL: Latest release on both boxes
- FINAL: Update collab cluster boxes to the tagged release
- FINAL: Update libp2p bootstrappers to the tagged release
- Update Kubo staging environment (Running Kubo tests on staging)
- Update ipfs-desktop
- Create PR updating kubo version in
package.jsonandpackage-lock.json - Smoke test with IPFS Companion Browser Extension against the PR build
- FINAL: Merge PR and ship new ipfs-desktop release
- Create PR updating kubo version in
- FINAL only: Update docs.ipfs.tech: run update-on-new-ipfs-tag.yml workflow and merge the PR
Promotion
- Create IPFS Discourse topic (RC example, FINAL example)
- Title:
Kubo vX.Y.Z(-rcN) is out!, tag:kubo - Use title as heading (
##) in description - Include: GitHub release link, IPNS binaries, docker pull command, release notes
- Pin topic globally (make banner if no existing banner)
- Title:
- Verify bot posted to #ipfs-chatter (Discord) or #ipfs-chatter:ipfs.io (Matrix)
- RC only: Comment on release issue mentioning early testers (example)
- FINAL only: Comment on release issue with link (example)
- FINAL only: Create blog.ipfs.tech entry (example)
- FINAL non-PATCH: (optional) Post on social media (bsky, x.com, Reddit)
Final Steps
- FINAL non-PATCH: Create dependency update PR
- Review direct dependencies from root
go.mod(⚠️ do NOT rungo get -uas it will upgrade indirect dependencies which may cause problems) - Run
make mod_tidy - Create PR with
go.modandgo.sumupdates - Add PR to next release milestone
- Review direct dependencies from root
- FINAL non-PATCH: Create next release issue (example)
- FINAL only: Close release issue