@cryptotaxi247 / kubo / commits / 1905aef24

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

Marcin Rataj committed Aug 29, 2025 at 23:53 UTC 1905aef24bb9410c210127941c8fac302f3a334b
1 file changed +109 -132
docs/RELEASE_CHECKLIST.md
+109 -132
@@ -1,136 +1,113 @@
1 -<!-- Last updated during [v0.36.0 release](https://github.com/ipfs/kubo/issues/10816) -->
1 +<!-- Last updated during [v0.37.0 release](https://github.com/ipfs/kubo/issues/10867) -->
2
3 # ✅ Release Checklist (vX.Y.Z[-rcN])
4
5 -## Labels
6 -
7 -If an item should be executed only for a specific release type, it is labeled with:
8 -
9 -- ![](https://img.shields.io/badge/only-RC-blue?style=flat-square) execute **ONLY** when releasing a Release Candidate
10 -- ![](https://img.shields.io/badge/only-FINAL-darkgreen?style=flat-square) execute **ONLY** when releasing a Final Release
11 -- ![](https://img.shields.io/badge/not-PATCH-orange?style=flat-square) do **NOT** execute when releasing a Patch Release
12 -
13 -Otherwise, it means a step should be executed for **ALL** release types.
14 -
15 -## Before the release
16 -
17 -This section covers tasks to be done ahead of the release.
18 -
19 -- [ ] Verify you have access to all the services and tools required for the release
20 - - [ ] [GPG signature](https://docs.github.com/en/authentication/managing-commit-signature-verification) configured in local git and in GitHub
21 - - [ ] [docker](https://docs.docker.com/get-docker/) installed on your system
22 - - [ ] [npm](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm) installed on your system
23 - - [ ] [kubo](https://github.com/ipfs/kubo) checked out under `$(go env GOPATH)/src/github.com/ipfs/kubo`
24 - - you can also symlink your clone to the expected location by running `mkdir -p $(go env GOPATH)/src/github.com/ipfs && ln -s $(pwd) $(go env GOPATH)/src/github.com/ipfs/kubo`
25 -- ![](https://img.shields.io/badge/not-PATCH-orange?style=flat-square) Upgrade Go used in CI to the latest patch release available at <https://go.dev/dl/>
26 -
27 -## The release
28 -
29 -This section covers tasks to be done during each release.
30 -
31 -### 1. Prepare release branch
32 -
33 -- [ ] Prepare the release branch and update version numbers accordingly
34 - - [ ] create a new branch `release-vX.Y.Z`
35 - - use `master` as base if `Z == 0`
36 - - use `release` as base if `Z > 0`
37 - - [ ] ![](https://img.shields.io/badge/only-RC1-blue?style=flat-square) update the `CurrentVersionNumber` in [version.go](version.go) in the `master` branch to `vX.Y+1.0-dev` ([example](https://github.com/ipfs/kubo/pull/9305))
38 - - [ ] update the `CurrentVersionNumber` in [version.go](version.go) in the `release-vX.Y.Z` branch to `vX.Y.Z(-rcN)` ([example](https://github.com/ipfs/kubo/pull/9394))
39 - - [ ] create a draft PR from `release-vX.Y.Z` to `release` ([example](https://github.com/ipfs/kubo/pull/9306))
40 - - [ ] Cherry-pick commits from `master` to the `release-vX.Y.Z` using `git cherry-pick -x <commit>` ([example](https://github.com/ipfs/kubo/pull/10636/commits/033de22e3bc6191dbb024ad6472f5b96b34e3ccf))
41 - - **NOTE:** cherry-picking with `-x` is important
42 - - [ ] verify all CI checks on the PR from `release-vX.Y.Z` to `release` are passing
43 - - [ ] ![](https://img.shields.io/badge/only-FINAL-darkgreen?style=flat-square) Replace the `Changelog` and `Contributors` sections of the [changelog](docs/changelogs/vX.Y.md) with the stdout (do **NOT** copy the stderr) of `./bin/mkreleaselog`.
44 - - **NOTE:** `mkreleaselog` expects your `$GOPATH/src/github.com/ipfs/kubo` to include latest commits from `release-vX.Y.Z`
45 - - [ ] ![](https://img.shields.io/badge/only-FINAL-darkgreen?style=flat-square) Merge the PR from `release-vX.Y.Z` to `release` using the `Create a merge commit`
46 - - do **NOT** use `Squash and merge` nor `Rebase and merge` because we need to be able to sign the merge commit
47 - - do **NOT** delete the `release-vX.Y.Z` branch
48 -
49 -### 2. Tag release
50 -
51 -- [ ] Create the release tag
52 - - ⚠️ **NOTE:** This is a dangerous operation! Go and Docker publishing are difficult to reverse! Have the release reviewer verify all the commands marked with !
53 - - [ ] ![](https://img.shields.io/badge/only-RC-blue?style=flat-square) tag the HEAD commit using `git tag -s vX.Y.Z(-rcN) -m 'Prerelease X.Y.Z(-rcN)'`
54 - - [ ] ![](https://img.shields.io/badge/only-FINAL-darkgreen?style=flat-square) tag the HEAD commit of the `release` branch using `git tag -s vX.Y.Z -m 'Release X.Y.Z'`
55 - - [ ] ⚠️ verify the tag is signed and tied to the correct commit using `git show vX.Y.Z(-rcN)`
56 - - [ ] push the tag to GitHub using `git push origin vX.Y.Z(-rcN)`
57 - - ⚠️ do **NOT** use `git push --tags` because it pushes all your local tags
58 -
59 -### 3. Publish
60 -
61 -- [ ] Publish Docker image to [DockerHub](https://hub.docker.com/r/ipfs/kubo/tags)
62 - - [ ] Wait for [Publish docker image](https://github.com/ipfs/kubo/actions/workflows/docker-image.yml) workflow run initiated by the tag push to finish
63 - - [ ] verify the image is available on [Docker Hub → tags](https://hub.docker.com/r/ipfs/kubo/tags)
64 -- [ ] Publish the release to [dist.ipfs.tech](https://dist.ipfs.tech)
65 - - [ ] check out [ipfs/distributions](https://github.com/ipfs/distributions)
66 - - [ ] create new branch: run `git checkout -b release-kubo-X.Y.Z(-rcN)`
67 - - [ ] Verify [ipfs/distributions](https://github.com/ipfs/distributions)'s `.tool-versions`'s `golang` entry is set to the [latest go release](https://go.dev/doc/devel/release) on the major go branch [Kubo is being tested on](https://github.com/ipfs/kubo/blob/master/.github/workflows/gotest.yml) (see `go-version:`). If not, update `.tool-versions` to match the latest golang.
68 - - [ ] run `./dist.sh add-version kubo vX.Y.Z(-rcN)` to add the new version to the `versions` file ([usage](https://github.com/ipfs/distributions#usage))
69 - - [ ] create and merge the PR which updates `dists/kubo/versions` (**NOTE:** ![](https://img.shields.io/badge/only-FINAL-darkgreen?style=flat-square) will also have `dists/kubo/current` – [example](https://github.com/ipfs/distributions/pull/1125))
70 - - [ ] wait for the [CI](https://github.com/ipfs/distributions/actions/workflows/main.yml) workflow run initiated by the merge to master to finish
71 - - [ ] verify the release is available on [dist.ipfs.tech](https://dist.ipfs.tech/#kubo)
72 -- [ ] Publish the release to [NPM](https://www.npmjs.com/package/kubo?activeTab=versions)
73 - - [ ] manually dispatch the [Release to npm](https://github.com/ipfs/npm-kubo/actions/workflows/main.yml) workflow if it was not executed already and verify it discovered the new release
74 - - [ ] verify the release is available on [NPM](https://www.npmjs.com/package/kubo?activeTab=versions)
75 -- [ ] Publish the release to [GitHub kubo/releases](https://github.com/ipfs/kubo/releases)
76 - - [ ] [create](https://docs.github.com/en/repositories/releasing-projects-on-github/managing-releases-in-a-repository#creating-a-release) a new release
77 - - [RC example](https://github.com/ipfs/kubo/releases/tag/v0.36.0-rc1)
78 - - [FINAL example](https://github.com/ipfs/kubo/releases/tag/v0.35.0)
79 - - [ ] use the `vX.Y.Z(-rcN)` tag
80 - - [ ] link to the release issue
81 - - [ ] ![](https://img.shields.io/badge/only-RC-blue?style=flat-square) link to the changelog in the description
82 - - [ ] ![](https://img.shields.io/badge/only-RC-blue?style=flat-square) check the `This is a pre-release` checkbox
83 - - [ ] ![](https://img.shields.io/badge/only-FINAL-darkgreen?style=flat-square) copy the changelog (without the header) in the description
84 - - [ ] ![](https://img.shields.io/badge/only-FINAL-darkgreen?style=flat-square) do **NOT** check the `This is a pre-release` checkbox
85 - - [ ] run the [sync-release-assets](https://github.com/ipfs/kubo/actions/workflows/sync-release-assets.yml) workflow and verify the release assets are attached to the GitHub release
86 -
87 -### 4. After Publishing
88 -
89 -- [ ] ![](https://img.shields.io/badge/only-FINAL-darkgreen?style=flat-square) Merge the [release](https://github.com/ipfs/kubo/tree/release) branch back into [master](https://github.com/ipfs/kubo/tree/master)
90 - - [ ] Create a new branch `merge-release-vX.Y.Z` from `release`
91 - - [ ] Create the next [`./docs/changelogs/vA.B.md`](https://github.com/ipfs/kubo/blob/master/docs/changelogs/) and link to the new changelog from the [`./CHANGELOG.md`](https://github.com/ipfs/kubo/blob/master/CHANGELOG.md) file
92 - - [ ] Create and merge a PR from `merge-release-vX.Y.Z` to `master`
93 - - ⚠️ do **NOT** use `Squash and merge` nor `Rebase and merge` because we need to be able to sign the merge commit
94 - - ⚠️ **NOTE:** make sure to ignore the changes to [version.go](version.go) (keep the `-dev` in `master`)
5 +**Release types:** RC (Release Candidate) | FINAL | PATCH
6 +
7 +## Prerequisites
8 +
9 +- [ ] [GPG signature](https://docs.github.com/en/authentication/managing-commit-signature-verification) configured in local git and GitHub
10 +- [ ] [Docker](https://docs.docker.com/get-docker/) installed on your system
11 +- [ ] [npm](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm) installed on your system
12 +- [ ] kubo repository cloned locally
13 +- [ ] **non-PATCH:** Upgrade Go in CI to latest patch from <https://go.dev/dl/>
14 +
15 +## 1. Prepare Release Branch
16 +
17 +- [ ] Fetch latest changes: `git fetch origin master release`
18 +- [ ] Create branch `release-vX.Y.Z` (base from: `master` if Z=0 for new minor/major, `release` if Z>0 for patch)
19 +- [ ] **RC1 only:** Switch to `master` branch and prepare for next release cycle:
20 + - [ ] Update [version.go](https://github.com/ipfs/kubo/blob/master/version.go) to `vX.Y+1.0-dev` (⚠️ double-check Y+1 is correct) ([example PR](https://github.com/ipfs/kubo/pull/9305))
21 + - [ ] Create `./docs/changelogs/vX.Y+1.md` and add link in [CHANGELOG.md](https://github.com/ipfs/kubo/blob/master/CHANGELOG.md)
22 +- [ ] Switch to `release-vX.Y.Z` branch and update [version.go](https://github.com/ipfs/kubo/blob/master/version.go) to `vX.Y.Z(-rcN)` (⚠️ double-check Y matches release) ([example](https://github.com/ipfs/kubo/pull/9394))
23 +- [ ] Create draft PR: `release-vX.Y.Z` → `release` ([example](https://github.com/ipfs/kubo/pull/9306))
24 +- [ ] In `release-vX.Y.Z` branch, cherry-pick commits from `master`: `git cherry-pick -x <commit>` ([example](https://github.com/ipfs/kubo/pull/10636/commits/033de22e3bc6191dbb024ad6472f5b96b34e3ccf))
25 + - ⚠️ **NOTE:** `-x` flag records original commit SHA for traceability and ensures cleaner merges with deduplicated commits in history
26 +- [ ] Verify all CI checks on the PR are passing
27 +- [ ] **FINAL only:** In `release-vX.Y.Z` branch, replace `Changelog` and `Contributors` sections with `./bin/mkreleaselog` stdout (do **NOT** copy stderr)
28 +- [ ] **FINAL only:** Merge PR (`release-vX.Y.Z` → `release`) using `Create a merge commit`
29 + - ⚠️ do **NOT** use `Squash and merge` nor `Rebase and merge` because we need to be able to sign the merge commit
30 + - ⚠️ do **NOT** delete the `release-vX.Y.Z` branch (needed for future patch releases and git history)
31 +
32 +## 2. Tag & Publish
33 +
34 +### Create Tag
35 +⚠️ **POINT OF NO RETURN:** Once pushed, tags trigger automatic Docker/NPM publishing that cannot be reversed!
36 +If you're making a release for the first time, do pair programming and have the release reviewer verify all commands.
37 +
38 +- [ ] **RC:** From `release-vX.Y.Z` branch: `git tag -s vX.Y.Z-rcN -m 'Prerelease X.Y.Z-rcN'`
39 +- [ ] **FINAL:** After PR merge, from `release` branch: `git tag -s vX.Y.Z -m 'Release X.Y.Z'`
40 +- [ ] ⚠️ Verify tag is signed and correct: `git show vX.Y.Z(-rcN)`
41 +- [ ] Push tag: `git push origin vX.Y.Z(-rcN)`
42 + - ⚠️ do **NOT** use `git push --tags` because it pushes all your local tags
43 +- [ ] **STOP:** Wait for [Docker build](https://github.com/ipfs/kubo/actions/workflows/docker-image.yml) to complete before proceeding
44 +
45 +### Publish Artifacts
46 +
47 +- [ ] **Docker:** Publish to [DockerHub](https://hub.docker.com/r/ipfs/kubo/tags)
48 + - [ ] Wait for [Publish docker image](https://github.com/ipfs/kubo/actions/workflows/docker-image.yml) workflow triggered by tag push
49 + - [ ] Verify image is available on [Docker Hub → tags](https://hub.docker.com/r/ipfs/kubo/tags)
50 +- [ ] **dist.ipfs.tech:** Publish to [dist.ipfs.tech](https://dist.ipfs.tech)
51 + - [ ] Check out [ipfs/distributions](https://github.com/ipfs/distributions)
52 + - [ ] Create branch: `git checkout -b release-kubo-X.Y.Z(-rcN)`
53 + - [ ] Verify `.tool-versions` golang matches [Kubo's CI](https://github.com/ipfs/kubo/blob/master/.github/workflows/gotest.yml) `go-version:` (update if needed)
54 + - [ ] Run: `./dist.sh add-version kubo vX.Y.Z(-rcN)` ([usage](https://github.com/ipfs/distributions#usage))
55 + - [ ] Create and merge PR (updates `dists/kubo/versions`, **FINAL** also updates `dists/kubo/current` - [example](https://github.com/ipfs/distributions/pull/1125))
56 + - [ ] Wait for [CI workflow](https://github.com/ipfs/distributions/actions/workflows/main.yml) triggered by merge
57 + - [ ] Verify release on [dist.ipfs.tech](https://dist.ipfs.tech/#kubo)
58 +- [ ] **NPM:** Publish to [NPM](https://www.npmjs.com/package/kubo?activeTab=versions)
59 + - [ ] Manually dispatch [Release to npm](https://github.com/ipfs/npm-kubo/actions/workflows/main.yml) workflow if not auto-triggered
60 + - [ ] Verify release on [NPM](https://www.npmjs.com/package/kubo?activeTab=versions)
61 +- [ ] **GitHub Release:** Publish to [GitHub](https://github.com/ipfs/kubo/releases)
62 + - [ ] [Create release](https://docs.github.com/en/repositories/releasing-projects-on-github/managing-releases-in-a-repository#creating-a-release) ([RC example](https://github.com/ipfs/kubo/releases/tag/v0.36.0-rc1), [FINAL example](https://github.com/ipfs/kubo/releases/tag/v0.35.0))
63 + - [ ] Use tag `vX.Y.Z(-rcN)`
64 + - [ ] Link to release issue
65 + - [ ] **RC:** Link to changelog, check `This is a pre-release`
66 + - [ ] **FINAL:** Copy changelog content (without header), do **NOT** check pre-release
67 + - [ ] Run [sync-release-assets](https://github.com/ipfs/kubo/actions/workflows/sync-release-assets.yml) workflow
68 + - [ ] Verify assets are attached to the GitHub release
69 +
70 +## 3. Post-Release
71 +
72 +### Technical Tasks
73 +
74 +- [ ] **FINAL only:** Merge `release` → `master`
75 + - [ ] Create branch `merge-release-vX.Y.Z` from `release`
76 + - [ ] Merge `master` to `merge-release-vX.Y.Z` first, and resolve conflict in `version.go`
77 + - ⚠️ **NOTE:** make sure to ignore the changes to [version.go](https://github.com/ipfs/kubo/blob/master/version.go) (keep the `-dev` in `master`)
78 + - [ ] Create and merge PR from `merge-release-vX.Y.Z` to `master` using `Create a merge commit`
79 + - ⚠️ do **NOT** use `Squash and merge` nor `Rebase and merge` because we want to preserve original commit history
80 - [ ] Update [ipshipyard/waterworks-infra](https://github.com/ipshipyard/waterworks-infra)
96 - - [ ] Update Kubo staging environment, see the [Running Kubo tests on staging](https://www.notion.so/Running-Kubo-tests-on-staging-488578bb46154f9bad982e4205621af8) for details.
97 - - [ ] ![](https://img.shields.io/badge/only-RC-blue?style=flat-square) Test last release against the current RC
98 - - [ ] ![](https://img.shields.io/badge/only-FINAL-darkgreen?style=flat-square) Test last release against the current one
99 - - [ ] Update collab cluster boxes to the tagged release (final or RC)
100 - - [ ] Update libp2p bootstrappers to the tagged release (final or RC)
101 -- [ ] Promote the release
102 - - [ ] create an [IPFS Discourse](https://discuss.ipfs.tech) topic ([prerelease example](https://discuss.ipfs.tech/t/kubo-v0-16-0-rc1-release-candidate-is-out/15248), [release example](https://discuss.ipfs.tech/t/kubo-v0-16-0-release-is-out/15249))
103 - - [ ] use `Kubo vX.Y.Z(-rcN) is out!` as the title and `kubo` as tags
104 - - [ ] repeat the title as a heading (`##`) in the description
105 - - [ ] link to the GitHub Release, binaries on IPNS, docker pull command and release notes in the description
106 - - [ ] pin the [IPFS Discourse](https://discuss.ipfs.tech) topic globally, you can make the topic a banner if there is no banner already
107 - - [ ] verify the [IPFS Discourse](https://discuss.ipfs.tech) topic was copied to:
108 - - [ ] [#ipfs-chatter](https://discord.com/channels/669268347736686612/669268347736686615) in IPFS Discord
109 - - [ ] [#ipfs-chatter](https://filecoinproject.slack.com/archives/C018EJ8LWH1) in FIL Slack
110 - - [ ] [#ipfs-chatter:ipfs.io](https://matrix.to/#/#ipfs-chatter:ipfs.io) in Matrix
111 - - [ ] ![](https://img.shields.io/badge/only-FINAL-darkgreen?style=flat-square) Add the link to the [IPFS Discourse](https://discuss.ipfs.tech) topic to the [GitHub Release](https://github.com/ipfs/kubo/releases/tag/vX.Y.Z(-rcN)) description ([example](https://github.com/ipfs/kubo/releases/tag/v0.17.0))
112 - - [ ] ![](https://img.shields.io/badge/only-RC-blue?style=flat-square) create an issue comment mentioning early testers on the release issue ([example](https://github.com/ipfs/kubo/issues/9319#issuecomment-1311002478))
113 - - [ ] ![](https://img.shields.io/badge/only-FINAL-darkgreen?style=flat-square) create an issue comment linking to the release on the release issue ([example](https://github.com/ipfs/kubo/issues/9417#issuecomment-1400740975))
114 - - [ ] ![](https://img.shields.io/badge/only-FINAL-darkgreen?style=flat-square) ![](https://img.shields.io/badge/not-PATCH-orange?style=flat-square) promote on bsky.app ([example](https://bsky.app/profile/ipshipyard.com/post/3lh2brzrwbs2c))
115 - - [ ] ![](https://img.shields.io/badge/only-FINAL-darkgreen?style=flat-square) ![](https://img.shields.io/badge/not-PATCH-orange?style=flat-square) promote on x.com ([example](https://x.com/ipshipyard/status/1885346348808929609))
116 - - [ ] ![](https://img.shields.io/badge/only-FINAL-darkgreen?style=flat-square) ![](https://img.shields.io/badge/not-PATCH-orange?style=flat-square) post the link to the [GitHub Release](https://github.com/ipfs/kubo/releases/tag/vX.Y.Z(-rcN)) to [Reddit](https://reddit.com/r/ipfs) ([example](https://www.reddit.com/r/ipfs/comments/9x0q0k/kubo_v0160_release_is_out/))
117 -- [ ] Manually smoke-test the new version with [IPFS Companion Browser Extension](https://docs.ipfs.tech/install/ipfs-companion/)
118 -- [ ] Update Kubo in [ipfs-desktop](https://github.com/ipfs/ipfs-desktop)
119 - - [ ] create a PR which updates `kubo` version to the tagged version in `package.json` and `package-lock.json`
120 - - [ ] ![](https://img.shields.io/badge/only-FINAL-darkgreen?style=flat-square) switch to final release and merge
121 -- [ ] ![](https://img.shields.io/badge/only-FINAL-darkgreen?style=flat-square) Update Kubo docs at docs.ipfs.tech:
122 - - [ ] ![](https://img.shields.io/badge/only-FINAL-darkgreen?style=flat-square) run the [update-on-new-ipfs-tag.yml](https://github.com/ipfs/ipfs-docs/actions/workflows/update-on-new-ipfs-tag.yml) workflow
123 - - [ ] ![](https://img.shields.io/badge/only-FINAL-darkgreen?style=flat-square) merge the PR created by the [update-on-new-ipfs-tag.yml](https://github.com/ipfs/ipfs-docs/actions/workflows/update-on-new-ipfs-tag.yml) workflow run
124 - </details>
125 -- [ ] ![](https://img.shields.io/badge/only-FINAL-darkgreen?style=flat-square) Create a blog entry on [blog.ipfs.tech](https://blog.ipfs.tech)
126 - - [ ] ![](https://img.shields.io/badge/only-FINAL-darkgreen?style=flat-square) create a PR which adds a release note for the new Kubo version ([example](https://github.com/ipfs/ipfs-blog/pull/529))
127 - - [ ] ![](https://img.shields.io/badge/only-FINAL-darkgreen?style=flat-square) merge the PR
128 - - [ ] ![](https://img.shields.io/badge/only-FINAL-darkgreen?style=flat-square) verify the blog entry was published
129 -- [ ] ![](https://img.shields.io/badge/only-FINAL-darkgreen?style=flat-square) ![](https://img.shields.io/badge/not-PATCH-orange?style=flat-square) Create a dependency update PR
130 - - [ ] ![](https://img.shields.io/badge/only-FINAL-darkgreen?style=flat-square) ![](https://img.shields.io/badge/not-PATCH-orange?style=flat-square) check out [ipfs/kubo](https://github.com/ipfs/kubo)
131 - - [ ] ![](https://img.shields.io/badge/only-FINAL-darkgreen?style=flat-square) ![](https://img.shields.io/badge/not-PATCH-orange?style=flat-square) go over direct dependencies from `go.mod` in the root directory (NOTE: do not run `go get -u` as it will upgrade indirect dependencies which may cause problems)
132 - - [ ] ![](https://img.shields.io/badge/only-FINAL-darkgreen?style=flat-square) ![](https://img.shields.io/badge/not-PATCH-orange?style=flat-square) run `make mod_tidy`
133 - - [ ] ![](https://img.shields.io/badge/only-FINAL-darkgreen?style=flat-square) ![](https://img.shields.io/badge/not-PATCH-orange?style=flat-square) create a PR which updates `go.mod` and `go.sum`
134 - - [ ] ![](https://img.shields.io/badge/only-FINAL-darkgreen?style=flat-square) ![](https://img.shields.io/badge/not-PATCH-orange?style=flat-square) add the PR to the next release milestone
135 -- [ ] ![](https://img.shields.io/badge/only-FINAL-darkgreen?style=flat-square) ![](https://img.shields.io/badge/not-PATCH-orange?style=flat-square) Create the next release issue
136 -- [ ] ![](https://img.shields.io/badge/only-FINAL-darkgreen?style=flat-square) Close the release issue
81 + - [ ] Update Kubo staging environment ([Running Kubo tests on staging](https://www.notion.so/Running-Kubo-tests-on-staging-488578bb46154f9bad982e4205621af8))
82 + - [ ] **RC:** Test last release against current RC
83 + - [ ] **FINAL:** Test last release against current one
84 + - [ ] Update collab cluster boxes to the tagged release
85 + - [ ] Update libp2p bootstrappers to the tagged release
86 +- [ ] Smoke test with [IPFS Companion Browser Extension](https://docs.ipfs.tech/install/ipfs-companion/)
87 +- [ ] Update [ipfs-desktop](https://github.com/ipfs/ipfs-desktop)
88 + - [ ] Create PR updating kubo version in `package.json` and `package-lock.json`
89 + - [ ] **FINAL only:** Merge and create/request new release
90 +- [ ] **FINAL only:** Update [docs.ipfs.tech](https://docs.ipfs.tech/): run [update-on-new-ipfs-tag.yml](https://github.com/ipfs/ipfs-docs/actions/workflows/update-on-new-ipfs-tag.yml) workflow and merge the PR
91 +
92 +### Promotion
93 +
94 +- [ ] Create [IPFS Discourse](https://discuss.ipfs.tech) topic ([RC example](https://discuss.ipfs.tech/t/kubo-v0-16-0-rc1-release-candidate-is-out/15248), [FINAL example](https://discuss.ipfs.tech/t/kubo-v0-37-0-is-out/19673))
95 + - [ ] Title: `Kubo vX.Y.Z(-rcN) is out!`, tag: `kubo`
96 + - [ ] Use title as heading (`##`) in description
97 + - [ ] Include: GitHub release link, IPNS binaries, docker pull command, release notes
98 + - [ ] Pin topic globally (make banner if no existing banner)
99 +- [ ] Verify bot posted to [#ipfs-chatter](https://discord.com/channels/669268347736686612/669268347736686615) (Discord) or [#ipfs-chatter:ipfs.io](https://matrix.to/#/#ipfs-chatter:ipfs.io) (Matrix)
100 +- [ ] **RC only:** Comment on release issue mentioning early testers ([example](https://github.com/ipfs/kubo/issues/9319#issuecomment-1311002478))
101 +- [ ] **FINAL only:** Comment on release issue with link ([example](https://github.com/ipfs/kubo/issues/9417#issuecomment-1400740975))
102 +- [ ] **FINAL only:** Create [blog.ipfs.tech](https://blog.ipfs.tech) entry ([example](https://github.com/ipfs/ipfs-blog/commit/32040d1e90279f21bad56b924fe4710bba5ba043))
103 +- [ ] **FINAL non-PATCH:** (optional) Post on social media ([bsky](https://bsky.app/profile/ipshipyard.com/post/3ltxcsrbn5s2k), [x.com](https://x.com/ipshipyard/status/1944867893226635603), [Reddit](https://www.reddit.com/r/ipfs/comments/1lzy6ze/release_v0360_ipfskubo/))
104 +
105 +### Final Steps
106 +
107 +- [ ] **FINAL non-PATCH:** Create dependency update PR
108 + - [ ] Review direct dependencies from root `go.mod` (⚠️ do **NOT** run `go get -u` as it will upgrade indirect dependencies which may cause problems)
109 + - [ ] Run `make mod_tidy`
110 + - [ ] Create PR with `go.mod` and `go.sum` updates
111 + - [ ] Add PR to next release milestone
112 +- [ ] **FINAL non-PATCH:** Create next release issue ([example](https://github.com/ipfs/kubo/issues/10816))
113 +- [ ] **FINAL only:** Close release issue
\ No newline at end of file