mirror of
https://github.com/ipfs/kubo.git
synced 2026-02-22 02:47:48 +08:00
Some checks failed
CodeQL / codeql (push) Has been cancelled
Docker Check / lint (push) Has been cancelled
Docker Check / build (push) Has been cancelled
Gateway Conformance / gateway-conformance (push) Has been cancelled
Gateway Conformance / gateway-conformance-libp2p-experiment (push) Has been cancelled
Go Build / go-build (push) Has been cancelled
Go Check / go-check (push) Has been cancelled
Go Lint / go-lint (push) Has been cancelled
Go Test / go-test (push) Has been cancelled
Interop / interop-prep (push) Has been cancelled
Sharness / sharness-test (push) Has been cancelled
Spell Check / spellcheck (push) Has been cancelled
Interop / helia-interop (push) Has been cancelled
Interop / ipfs-webui (push) Has been cancelled
- clarify staging environment step for FINAL releases - mark infrastructure updates (collab cluster, bootstrappers) as FINAL only - improve ipfs-desktop release step wording - update discourse topic examples to v0.38.0 - reference v0.38.0 release issue in metadata comment
8.8 KiB
8.8 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) - In
release-vX.Y.Zbranch, cherry-pick commits frommaster:git cherry-pick -x <commit>(example)- ⚠️ NOTE:
-xflag records original commit SHA for traceability and ensures cleaner merges with deduplicated commits in history
- ⚠️ NOTE:
- Verify all CI checks on the PR are passing
- FINAL only: In
release-vX.Y.Zbranch, replaceChangelogandContributorssections with./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 mergebecause we need to be able to sign 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 that cannot be reversed! 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 --tagsbecause it pushes all your local tags
- ⚠️ do NOT use
- STOP: Wait for Docker build to complete before proceeding
Publish Artifacts
- Docker: Publish to DockerHub
- Wait for Publish docker image workflow triggered by tag push
- Verify 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
- 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: make sure to ignore the changes to version.go (keep the
-devinmaster)
- ⚠️ NOTE: make sure to ignore the changes to version.go (keep the
- Create and merge PR from
merge-release-vX.Y.ZtomasterusingCreate a merge commit- ⚠️ do NOT use
Squash and mergenorRebase and mergebecause we want to preserve original commit history
- ⚠️ 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)
- Smoke test with IPFS Companion Browser Extension
- Update ipfs-desktop
- Create PR updating kubo version in
package.jsonandpackage-lock.json - 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