kubo/docs/RELEASE_CHECKLIST.md
Marcin Rataj c04781c7f7
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: update release checklist based on v0.38.0 learnings (#11007)
- 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
2025-10-09 03:27:20 +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: Latest release on both boxes
    • FINAL: Update collab cluster boxes to the tagged release
    • FINAL: 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: Merge PR and ship new ipfs-desktop 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