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
* chore: simplify and update * docs: streamline release checklist - reduce from 128 to 113 lines while preserving all information - add clarity on command execution context (which branch/directory) - improve dangerous operation warnings (point of no return) - consolidate prerequisites into checklist format - clarify cherry-pick -x rationale (traceability and deduplication) - explain why release branches are kept (patch releases) - add fetch step to prevent stale branch issues - simplify social media into single optional item - add STOP checkpoint after tag push for docker verification * docs: update release checklist last updated reference * docs: remove GOPATH requirement from release checklist mkreleaselog now works from any directory where kubo is checked out * docs: clarify merge process in release checklist add step to merge master into merge-release branch first and specify "Create a merge commit" option explicitly * docs: address PR #10870 feedback - update forum example to v0.37.0 - add social media post examples from v0.36.0 - add example for creating next release issue * docs: update blog example to kubo v0.36.0 commit
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: Test last release against current one
- Update collab cluster boxes to the tagged release
- 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 only: Merge and create/request new 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