kubo/docs/RELEASE_CHECKLIST.md
Marcin Rataj 1905aef24b
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
docs: simplify release process (#10870)
* 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
2025-08-29 23:53:52 +02:00

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: master if Z=0 for new minor/major, release if Z>0 for patch)
  • RC1 only: Switch to master branch and prepare for next release cycle:
  • Switch to release-vX.Y.Z branch and update version.go to vX.Y.Z(-rcN) (⚠️ double-check Y matches release) (example)
  • Create draft PR: release-vX.Y.Zrelease (example)
  • In release-vX.Y.Z branch, cherry-pick commits from master: git cherry-pick -x <commit> (example)
    • ⚠️ NOTE: -x flag records original commit SHA for traceability and ensures cleaner merges with deduplicated commits in history
  • Verify all CI checks on the PR are passing
  • FINAL only: In release-vX.Y.Z branch, replace Changelog and Contributors sections with ./bin/mkreleaselog stdout (do NOT copy stderr)
  • FINAL only: Merge PR (release-vX.Y.Zrelease) using Create a merge commit
    • ⚠️ do NOT use Squash and merge nor Rebase and merge because we need to be able to sign the merge commit
    • ⚠️ do NOT delete the release-vX.Y.Z branch (needed for future patch releases and git history)

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.Z branch: git tag -s vX.Y.Z-rcN -m 'Prerelease X.Y.Z-rcN'
  • FINAL: After PR merge, from release branch: 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 because it pushes all your local tags
  • STOP: Wait for Docker build to complete before proceeding

Publish Artifacts

3. Post-Release

Technical Tasks

  • FINAL only: Merge releasemaster
    • Create branch merge-release-vX.Y.Z from release
    • Merge master to merge-release-vX.Y.Z first, and resolve conflict in version.go
      • ⚠️ NOTE: make sure to ignore the changes to version.go (keep the -dev in master)
    • Create and merge PR from merge-release-vX.Y.Z to master using Create a merge commit
      • ⚠️ do NOT use Squash and merge nor Rebase and merge because we want to preserve original commit history
  • 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
  • Smoke test with IPFS Companion Browser Extension
  • Update ipfs-desktop
    • Create PR updating kubo version in package.json and package-lock.json
    • FINAL only: Merge and create/request new release
  • FINAL only: Update docs.ipfs.tech: run update-on-new-ipfs-tag.yml workflow and merge the PR

Promotion

Final Steps

  • FINAL non-PATCH: Create dependency update PR
    • Review direct dependencies from root go.mod (⚠️ do NOT run go get -u as it will upgrade indirect dependencies which may cause problems)
    • Run make mod_tidy
    • Create PR with go.mod and go.sum updates
    • Add PR to next release milestone
  • FINAL non-PATCH: Create next release issue (example)
  • FINAL only: Close release issue