diff --git a/bin/mkreleaselog b/bin/mkreleaselog
index 1b31854a754..f53850c4ce0 100755
--- a/bin/mkreleaselog
+++ b/bin/mkreleaselog
@@ -261,7 +261,7 @@ recursive_release_log() {
printf -- "Generating Changelog for %s %s..%s\n" "$module" "$start" "$end" >&2
- echo "### Changelog"
+ echo "### 📝 Changelog"
echo
echo "Full Changelog
"
echo
@@ -293,7 +293,7 @@ recursive_release_log() {
echo
echo " "
echo
- echo "### Contributors"
+ echo "### 👨👩👧👦 Contributors"
echo
echo "| Contributor | Commits | Lines ± | Files Changed |"
diff --git a/docs/PATCH_RELEASE_TEMPLATE.md b/docs/PATCH_RELEASE_TEMPLATE.md
deleted file mode 100644
index a2599d9fd2d..00000000000
--- a/docs/PATCH_RELEASE_TEMPLATE.md
+++ /dev/null
@@ -1,30 +0,0 @@
-# Patch Release Checklist
-
-This process handles patch releases from version `vX.Y.Z` to `vX.Y.Z+1` assuming that `vX.Y.Z` is the latest released version of Kubo.
-
-- [ ] Get temporary permissions to force-push to `release-*` branches
-- [ ] Fork a new branch (`release-vX.Y.Z`) from `release` and cherry-pick the relevant commits from master (or custom fixes) onto this branch
- - [ ] Use `git cherry-pick -x` so that the commit message says `(cherry picked from commit ...)`
-- [ ] Make a minimal changelog update tracking the relevant fixes to CHANGELOG, as its own commit e.g. `docs: update changelog vX.Y.Z+1`
-- [ ] version string in `version.go` has been updated (in the `release-vX.Y.Z+1` branch), as its own commit.
-- [ ] Make a PR merging `release-vX.Y.Z+1` into the release branch
- - This may be unnecessary, e.g. for backports
-- [ ] Tag the merge commit in the `release` branch with `vX.Y.Z+1` (ensure the tag is signed)
-- [ ] Add artifacts to https://dist.ipfs.tech/kubo
- 1. Make a PR against [ipfs/distributions](https://github.com/ipfs/distributions) with local changes produced by `add-version` (see [usage](https://github.com/ipfs/distributions#usage))
- 2. Wait for PR to build artifacts and generate diff
- 3. Inspect results, merge if CI is green and the diff looks ok
- 4. Wait for `master` branch to build and update DNSLink at https://dist.ipfs.tech
-- [ ] Cut a release on [github](https://github.com/ipfs/kubo/releases) and reuse signed artifacts from https://dist.ipfs.tech/kubo (run [sync-release-assets.yml workflow](https://github.com/ipfs/kubo/actions/workflows/sync-release-assets.yml)).
-- [ ] Announce the Release:
- - [ ] On [discuss.ipfs.tech](https://discuss.ipfs.tech)
- - This will automatically post to Matrix (`#lobby:ipfs.io`) and IPFS Discord (`#ipfs-chatter`)
- - Examples from the past: [0.13.1](https://discuss.ipfs.tech/t/go-ipfs-v0-13-1-has-been-released/14599)
- - [ ] Pin the discuss topic
-- [ ] Release published
- - [ ] to [dist.ipfs.tech](https://dist.ipfs.tech)
- - [ ] to [npm-go-ipfs](https://www.npmjs.com/package/go-ipfs) (should be done by [ipfs/npm-go-ipfs](https://github.com/ipfs/npm-go-ipfs), but ok to dispatch [this job](https://github.com/ipfs/npm-go-ipfs/actions/workflows/main.yml) manually)
- - [ ] to [github](https://github.com/ipfs/kubo/releases)
- - [ ] to [arch](https://www.archlinux.org/packages/community/x86_64/go-ipfs/) (flag it out of date)
-- [ ] Cut a new ipfs-desktop release
-- [ ] Merge the `release` branch back into `master`, ignoring the changes to `version.go` (keep the `-dev` version from master).
diff --git a/docs/RELEASE_ISSUE_TEMPLATE.md b/docs/RELEASE_ISSUE_TEMPLATE.md
index cb5c966a8cb..3ece6d4149b 100644
--- a/docs/RELEASE_ISSUE_TEMPLATE.md
+++ b/docs/RELEASE_ISSUE_TEMPLATE.md
@@ -1,6 +1,4 @@
-
-
-> Release Issue Template. If doing a patch release, see [here](https://github.com/ipfs/kubo/blob/master/docs/PATCH_RELEASE_TEMPLATE.md)
+
# Items to do upon creating the release issue
- [ ] Fill in the Meta section
@@ -38,176 +36,180 @@ As usual, this release includes important fixes, some of which may be critical f
## ✅ Release Checklist
-Checklist:
-
-- [ ] **Stage 0 - Prerequisites**
- - [ ] Open an issue against [bifrost-infra](https://github.com/protocol/bifrost-infra) ahead of the release ([example](https://github.com/protocol/bifrost-infra/issues/2109)). **Ideally, do this multiple days in advance of the RC** to give Bifrost the heads up that asks will be coming their way.
- - [ ] Spell out all that we want updated - gateways, the bootstraper and the cluster/preload nodes
- - [ ] Mention @protocol/bifrost-team in the issue and let them know the expected date of the release
- - Issue link:
- - [ ] Ensure that the `What's left for release` section has all the checkboxes checked. If that's not the case, discuss the open items with Kubo maintainers and update the release schedule accordingly.
- - [ ] Create `docs-release-vX.Y.Z` branch, open a draft PR and keep updating `docs/RELEASE_ISSUE_TEMPLATE.md` on that branch as you go.
- - [ ] Link it in the "Meta" section above.
- - [ ] Ensure you have a [GPG key generated](https://docs.github.com/en/authentication/managing-commit-signature-verification/generating-a-new-gpg-key) and [added to your GitHub account](https://docs.github.com/en/authentication/managing-commit-signature-verification/adding-a-gpg-key-to-your-github-account). This will enable you to created signed tags.
- - [ ] Ensure you have [admin access](https://discuss.ipfs.tech/g/admins) to [IPFS Discourse](https://discuss.ipfs.tech/). Admin access is required to globally pin posts and create banners. @2color might be able to assist you.
- - [ ] Access to [#bifrost](https://filecoinproject.slack.com/archives/C03MMMF606T) channel in FIL Slack might come in handy. Ask the release reviewer to invite you over.
- - [ ] Access to [#shared-pl-marketing-requests](https://filecoinproject.slack.com/archives/C018EJ8LWH1) channel in FIL Slack will be required to request social shares. Ask the release reviewer to invite you over.
- - [ ] After the release is deployed to our internal infrastructure, you're going to need read access to [IPFS network metrics](https://github.com/protocol/pldw/blob/624f47cf4ec14ad2cec6adf601a9f7b203ef770d/docs/sources/ipfs.md#ipfs-network-metrics) dashboards. Open an access request in https://github.com/protocol/pldw/issues/new/choose if you don't have it yet ([example](https://github.com/protocol/pldw/issues/158)).
- - [ ] You're also going to need NPM installed on your system. See [here](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm) for instructions.
- - [ ] Prepare changelog proposal in [docs/changelogs/vX.Y.md](https://github.com/ipfs/kubo/blob/master/docs/changelogs/).
- - Skip filling out the `### Changelog` section (the one where which lists all the commits and contributors) for now. We will populate it after the release branch is cut.
- - PR link:
- - [ ] Ensure the new changelog is linked in the [CHANGELOG.md](CHANGELOG.md) file.
- - [ ] Install ZSH ([instructions](https://github.com/ohmyzsh/ohmyzsh/wiki/Installing-ZSH#install-and-set-up-zsh-as-default)). It is needed by the changelog creation script.
- - [ ] Ensure you have `kubo` checked out under `$(go env GOPATH)/src/github.com/ipfs/kubo`. This is required by the changelog creation script.
- - If you want your clone to live in a different location, you can symlink it 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`.
- - [ ] Ensure that [README.md](https://github.com/ipfs/go-ipfs/tree/master/README.md) is up to date.
-- [ ] **Stage 1 - Initial Preparations**
- - [ ] Upgrade to the latest patch release of Go that CircleCI has published (currently used version: `1.19.1`)
- - [ ] See the list here: https://hub.docker.com/r/cimg/go/tags
- - [ ] [ipfs/distributions](https://github.com/ipfs/distributions): bump [this version](https://github.com/ipfs/distributions/blob/master/.tool-versions#L2)
- - [ ] [ipfs/kubo](https://github.com/ipfs/kubo): [example PR](https://github.com/ipfs/kubo/pull/8599)
- - [ ] [ipfs/ipfs-docs](https://github.com/ipfs/ipfs-docs): [example PR](https://github.com/ipfs/ipfs-docs/pull/1298) - only if the major version changed
- - [ ] Fork a new branch (`release-vX.Y.Z`) from `master`.
- - [ ] Bump the version in `version.go` in the `master` branch to `vX.(Y+1).0-dev` via a PR ([example](https://github.com/ipfs/kubo/pull/9305)).
-- [ ] **Stage 2 - Release Candidate** - _if any [non-trivial](docs/releases.md#footnotes) changes need to be included in the release, return to this stage_
- - [ ] If it's not a first RC, add new commits to the `release-vX.Y.Z` branch from `master` using `git cherry-pick -x ...`
- - Note: `release-*` branches are protected. You can do all needed updates on a separated branch (e.g. `wip-release-vX.Y.Z`) and when everything is settled push to `release-vX.Y.Z`
- - [ ] Bump the version in `version.go` in the `release-vX.Y.Z` branch to `vX.Y.Z-rcN`.
- - [ ] If it's a first RC, create a draft PR targeting `release` branch if it doesn't exist yet ([example](https://github.com/ipfs/kubo/pull/9306)).
- - [ ] Wait for CI to run and complete PR checks. All checks should pass.
- - [ ] Create a signed tag for the release candidate.
- - [ ] This is a dangerous operation, as it is difficult to reverse due to Go modules and automated Docker image publishing. Remember to verify the commands you intend to run for items marked with ⚠️ with the release reviewer.
- - [ ] ⚠️ Tag HEAD `release-vX.Y.Z` commit with `vX.Y.Z-rcN` (`git tag -s vX.Y.Z-rcN -m 'Pre-release X.Y.Z-rcn'`)
- - [ ] Run `git show vX.Y.Z-rcN` to ensure the tag is correct.
- - [ ] ⚠️ Push the `vX.Y.Z-rcN` tag to GitHub (`git push origin vX.Y.Z-rcN`; DO NOT USE `git push --tags` because it pushes all your local tags).
- - [ ] Add artifacts to https://dist.ipfs.tech by making a PR against [ipfs/distributions](https://github.com/ipfs/distributions)
- - [ ] Clone the `ipfs/distributions` repo locally.
- - [ ] Create a new branch (`kubo-release-vX.Y.Z-rcn`) from `master`.
- - [ ] Run `./dist.sh add-version kubo vX.Y.Z-rcN` to add the new version to the `versions` file ([instructions](https://github.com/ipfs/distributions#usage)).
- - `dist.sh` will print _WARNING: not marking pre-release kubo vX.Y.Z-rcN as the current version._.
- - [ ] Push the `kubo-release-vX.Y.Z-rcn` branch to GitHub and create a PR from that branch ([example](https://github.com/ipfs/distributions/pull/760)).
- - [ ] Ask for a review from the release reviewer.
- - [ ] Enable auto-merge for the PR.
- - PR build will build the artifacts and generate a diff in around 30 minutes
- - PR will be merged automatically once the diff is approved
- - `master` build will publish the artifacts to https://dist.ipfs.io in around 30 minutes
- - [ ] Ensure that the artifacts are available at https://dist.ipfs.io
- - [ ] Publish the RC to [the NPM package](https://www.npmjs.com/package/go-ipfs?activeTab=versions) by running https://github.com/ipfs/npm-go-ipfs/actions/workflows/main.yml (it happens automatically but it is safe to speed up the process and kick off a run manually)
- - [ ] Cut a pre-release on [GitHub](https://github.com/ipfs/kubo/releases) ([instructions](https://docs.github.com/en/repositories/releasing-projects-on-github/managing-releases-in-a-repository#creating-a-release), [example](https://github.com/ipfs/kubo/releases/tag/v0.17.0-rc1))
- - Use `vX.Y.Z-rcN` as the tag.
- - Link to the release issue in the description.
- - Link to the relevant [changelog](https://github.com/ipfs/kubo/blob/master/docs/changelogs/) in the description.
- - Check `This is a pre-release`.
- - [ ] Synchronize release artifacts by running [sync-release-assets](https://github.com/ipfs/kubo/actions/workflows/sync-release-assets.yml) workflow.
- - [ ] Announce the RC
- - [ ] Create a new post on [IPFS Discourse](https://discuss.ipfs.tech). ([example](https://discuss.ipfs.tech/t/kubo-v0-16-0-rc1-release-candidate-is-out/15248))
- - Use `Kubo vX.Y.Z-rcn Release Candidate is out!` as the title.
- - Use `kubo` and `go-ipfs` as topics.
- - Repeat the title as a heading (`##`) in the description.
- - Link to the GitHub Release, binaries on IPNS, docker pull command and release notes in the description.
- - [ ] Pin the topic globally so that it stays at the top of the category.
- - [ ] If there is no more important banner currently set on Discourse (e.g. IPFS Camp announcement), make the topic into a banner.
- - [ ] Check if Discourse post was automatically copied to:
- - [ ] IPFS Discord #ipfs-chatter
- - [ ] FIL Slack #ipfs-chatter
- - [ ] Matrix https://matrix.to/#/#ipfs-chatter:ipfs.io
- - [ ] Mention [early testers](https://github.com/ipfs/go-ipfs/tree/master/docs/EARLY_TESTERS.md) in the comment under the release issue ([example](https://github.com/ipfs/kubo/issues/9319#issuecomment-1311002478)).
-- [ ] **Stage 3 - Internal Testing**
- - [ ] Infrastructure Testing.
- - [ ] Update the issue against [bifrost-infra](https://github.com/protocol/bifrost-infra) ([example](https://github.com/protocol/bifrost-infra/issues/2109)).
- - [ ] Mention @protocol/bifrost-team in the issue to let them know the release is ready
- - [ ] [Optional] Reply under a message about the issue in the #bifrost channel on FIL Slack once the RC is out. Send the message to the channel.
- - [ ] Check [metrics](https://protocollabs.grafana.net/d/8zlhkKTZk/gateway-slis-precomputed?orgId=1) every day.
- - Compare the metrics trends week over week.
- - If there is an unexpected variation in the trend, message the #bifrost channel on FIL Slack and ask for help investigating the cause.
- - [ ] IPFS Application Testing.
- - [ ] [IPFS Desktop](https://github.com/ipfs-shipyard/ipfs-desktop)
- - [ ] Upgrade to the RC in [ipfs-desktop](https://github.com/ipfs-shipyard/ipfs-desktop)
- - [ ] Run `npm install` to update `package-lock.json`.
- - [ ] Push to a branch ([example](https://github.com/ipfs/ipfs-desktop/pull/1826/commits/b0a23db31ce942b46d95965ee6fe770fb24d6bde))
- - [ ] Open a draft PR to track through the final release ([example](https://github.com/ipfs/ipfs-desktop/pull/1826))
- - [ ] Ensure CI tests pass
- - [ ] [IPFS Companion](https://github.com/ipfs-shipyard/ipfs-companion)
- - [ ] Start kubo daemon of the version to release.
- - [ ] Start a fresh chromium or chrome instance using `chromium --user-data-dir=$(mktemp -d)` (macos `/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --user-data-dir=$(mktemp -d)`)
- - [ ] Start a fresh firefox instance using `firefox --profile $(mktemp -d)` (macos `/Applications/Firefox.app/Contents/MacOS/firefox --profile $(mktemp -d)`)
- - [ ] Install IPFS Companion from [vendor-specific store](https://github.com/ipfs/ipfs-companion/#readme).
- - [ ] Check that the communication between Kubo daemon and IPFS companion is working properly checking if the number of connected peers changes.
-- [ ] **Stage 5 - Release** - _ONLY FOR FINAL RELEASE_
- - [ ] Prepare the `release` branch.
- - [ ] Bump the version in `version.go` in the `release-vX.Y.Z` branch to `X.Y.Z`.
- - [ ] Update the [docs/changelogs/vX.Y.md](docs/changelogs) with the new commits and contributors.
- - [ ] Run `./bin/mkreleaselog` twice to generate the changelog and copy the output.
- - The first run of the script might be polluted with `git clone` output.
- - [ ] Paste the output into the `### Changelog` section of the changelog file inside the `
` block.
- - [ ] Commit the changelog changes.
- - [ ] Push the `release-vX.Y.Z` branch to GitHub (`git push origin release-vX.Y.Z`)
- - [ ] Mark the PR created from `release-vX.Y.Z` as ready for review.
- - [ ] Ensure the PR is targeting `release` branch.
- - [ ] Ensure that CI is green.
- - [ ] Have release reviewer review the PR.
- - [ ] Merge the PR into `release` branch using the `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.
- - [ ] Checkout the `release` branch locally.
- - Remember to pull the latest changes.
- - [ ] Create a signed tag for the release.
- - [ ] This is a dangerous operation, as it is difficult to reverse due to Go modules and automated Docker image publishing. Remember to verify the commands you intend to run for items marked with ⚠️ with the release reviewer.
- - [ ] ⚠️ Tag HEAD `release` commit with `vX.Y.Z` (`git tag -s vX.Y.Z -m 'Release X.Y.Z'`)
- - [ ] Run `git show vX.Y.Z` to ensure the tag is correct.
- - [ ] ⚠️ Push the `vX.Y.Z` tag to GitHub (`git push origin vX.Y.Z`; DO NOT USE `git push --tags` because it pushes all your local tags).
- - [ ] Publish the release.
- - [ ] Wait for [Publish docker image](https://github.com/ipfs/kubo/actions/workflows/docker-image.yml) workflow run initiated by the tag push to finish.
- - [ ] Add artifacts to https://dist.ipfs.tech by making a PR against [ipfs/distributions](https://github.com/ipfs/distributions)
- - [ ] Clone the `ipfs/distributions` repo locally.
- - [ ] Create a new branch (`kubo-release-vX.Y.Z`) from `master`.
- - [ ] Run `./dist.sh add-version kubo vX.Y.Z` to add the new version to the `versions` file ([instructions](https://github.com/ipfs/distributions#usage)).
- - [ ] Push the `kubo-release-vX.Y.Z` branch to GitHub and create a PR from that branch ([example](https://github.com/ipfs/distributions/pull/768)).
- - [ ] Ask for a review from the release reviewer.
- - [ ] Enable auto-merge for the PR.
- - PR build will build the artifacts and generate a diff in around 30 minutes
- - PR will be merged automatically once the diff is approved
- - `master` build will publish the artifacts to https://dist.ipfs.io in around 30 minutes
- - [ ] Ensure that the artifacts are available at https://dist.ipfs.io
- - [ ] Publish the release to [the NPM package](https://www.npmjs.com/package/go-ipfs?activeTab=versions) by running https://github.com/ipfs/npm-go-ipfs/actions/workflows/main.yml (it happens automatically but it is safe to speed up the process and kick off a run manually)
- - [ ] Cut the release on [GitHub](https://github.com/ipfs/kubo/releases) ([instructions](https://docs.github.com/en/repositories/releasing-projects-on-github/managing-releases-in-a-repository#creating-a-release), [example](https://github.com/ipfs/kubo/releases/tag/v0.17.0))
- - Use `vX.Y.Z` as the tag.
- - Copy the relevant [changelog](https://github.com/ipfs/kubo/blob/release/docs/changelogs/) into the release description.
- - Keep the release notes as trim as possible (e.g. remove top headers where possible, [example](https://github.com/ipfs/kubo/releases/tag/v0.17.0))
- - [ ] Synchronize release artifacts by running [sync-release-assets](https://github.com/ipfs/kubo/actions/workflows/sync-release-assets.yml) workflow.
- - [ ] TODO: https://github.com/protocol/bifrost-infra/issues/2184#issuecomment-1315279257
- - [ ] Announce the release
- - [ ] Add a link to the release to this release issue as a comment.
- - [ ] Create a new post on [IPFS Discourse](https://discuss.ipfs.tech). ([example](https://discuss.ipfs.tech/t/kubo-v0-16-0-release-is-out/15286))
- - Use `Kubo vX.Y.Z Release is out!` as the title.
- - Use `kubo` and `go-ipfs` as topics.
- - Repeat the title as a heading (`##`) in the description.
- - Link to the GitHub Release, binaries on IPNS, docker pull command and release notes in the description.
- - [ ] Pin the topic globally so that it stays at the top of the category.
- - [ ] If there is no more important banner currently set on Discourse (e.g. IPFS Camp announcement), make the topic into a banner.
- - [ ] Check if Discourse post was automatically copied to:
- - [ ] IPFS Discord #ipfs-chatter
- - [ ] FIL Slack #ipfs-chatter
- - [ ] Matrix
- - [ ] Add a link from release notes to Discuss post (like we did here: https://github.com/ipfs/kubo/releases/tag/v0.17.0)
- - [ ] Update the draft PR created for [interop](https://github.com/ipfs/interop) to use the new release and mark it as ready for review.
- - [ ] Update the draft PR created for [IPFS Desktop](https://github.com/ipfs-shipyard/ipfs-desktop) to use the new release and mark it as ready for review.
- - [ ] Update docs
- - [ ] Run https://github.com/ipfs/ipfs-docs/actions/workflows/update-on-new-ipfs-tag.yml to generate a PR to the docs repo
- - [ ] Merge the auto-created PR in https://github.com/ipfs/ipfs-docs/pulls ([example](https://github.com/ipfs/ipfs-docs/pull/1263))
- - [ ] Get the blog post created
- - [ ] Submit a request for blog post creation using [the form](https://airtable.com/shrNH8YWole1xc70I).
- - Title: Just released: Kubo X.Y.Z!
- - Link type: Release notes
- - URL: https://github.com/ipfs/kubo/releases/tag/vX.Y.Z
- - [ ] The post is live on https://blog.ipfs.io
- - [ ] Share the link to the GitHub release
- - [ ] Twitter (request in Filecoin Slack channel #shared-pl-marketing-requests; [example](https://filecoinproject.slack.com/archives/C018EJ8LWH1/p1664903524843269?thread_ts=1664885305.374909&cid=C018EJ8LWH1))
- - [ ] [Reddit](https://reddit.com/r/ipfs)
-- [ ] **Stage 6 - Post-Release**
- - [ ] Merge the `release` branch back into `master`, ignoring the changes to `version.go` (keep the `-dev` version from master).
- - [ ] Create an issue using this release issue template for the _next_ release.
- - [ ] Close this release issue.
+### Labels
+
+If an item should be executed for a specific release type, it should be labeled with one of the following labels:
+
+- ![](https://img.shields.io/badge/only-RC-blue?style=flat-square) execute **ONLY** when releasing a Release Candidate
+- ![](https://img.shields.io/badge/only-FINAL-green?style=flat-square) execute **ONLY** when releasing a Final Release
+
+Otherwise, it means it should be executed for **ALL** release types.
+
+Patch releases should follow the same process as `.0` releases. If some item should **NOT** be executed for a Patch Release, it should be labeled with:
+
+- ![](https://img.shields.io/badge/not-PATCH-yellow?style=flat-square) do **NOT** execute when releasing a Patch Release
+
+### Before the release
+
+This section covers tasks to be done ahead of the release.
+
+- [ ] Verify you have access to all the services and tools required for the release
+ - [ ] [GPG signature](https://docs.github.com/en/authentication/managing-commit-signature-verification) configured in local git and in GitHub
+ - [ ] [admin access to IPFS Discourse](https://discuss.ipfs.tech/g/admins)
+ - ask the previous release owner (or @2color) for an invite
+ - [ ] ![](https://img.shields.io/badge/not-PATCH-yellow?style=flat-square) [access to #shared-pl-marketing-requests](https://filecoinproject.slack.com/archives/C018EJ8LWH1) channel in FIL Slack
+ - ask the previous release owner for an invite
+ - [ ] [access to IPFS network metrics](https://github.com/protocol/pldw/blob/624f47cf4ec14ad2cec6adf601a9f7b203ef770d/docs/sources/ipfs.md#ipfs-network-metrics) dashboards in Grafana
+ - open an access request in the [pldw](https://github.com/protocol/pldw/issues/new/choose)
+ - [example](https://github.com/protocol/pldw/issues/158)
+ - [ ] [kuboreleaser](https://github.com/ipfs/kuboreleaser) checked out on your system (_only if you're using [kuboreleaser](https://github.com/ipfs/kuboreleaser)_)
+ - [ ] [docker](https://docs.docker.com/get-docker/) installed on your system (_only if you're using [kuboreleaser](https://github.com/ipfs/kuboreleaser)_)
+ - [ ] [npm](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm) installed on your system (_only if you're **NOT** using [kuboreleaser](https://github.com/ipfs/kuboreleaser)_)
+ - [ ] [zsh](https://github.com/ohmyzsh/ohmyzsh/wiki/Installing-ZSH#install-and-set-up-zsh-as-default) installed on your system
+ - [ ] [kubo](https://github.com/ipfs/kubo) checked out under `$(go env GOPATH)/src/github.com/ipfs/kubo`
+ - 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`
+ - [ ] ![](https://img.shields.io/badge/not-PATCH-yellow?style=flat-square) [Reddit](https://www.reddit.com) account
+- ![](https://img.shields.io/badge/not-PATCH-yellow?style=flat-square) Upgrade Go used in CI to the latest patch release available in [CircleCI](https://hub.docker.com/r/cimg/go/tags) in:
+ - [ ] ![](https://img.shields.io/badge/not-PATCH-yellow?style=flat-square) [ipfs/distributions](https://github.com/ipfs/distributions)
+ - [example](https://github.com/ipfs/distributions/pull/756)
+ - [ ] ![](https://img.shields.io/badge/not-PATCH-yellow?style=flat-square) [ipfs/ipfs-docs](https://github.com/ipfs/ipfs-docs)
+ - [example](https://github.com/ipfs/ipfs-docs/pull/1298)
+- [ ] Verify there is nothing [left for release](-what-s-left-for-release)
+- [ ] Create a release process improvement PR
+ - [ ] update the [release issue template](docs/RELEASE_ISSUE_TEMPLATE.md) as you go
+ - [ ] link it in the [Meta](#meta) section
+
+### The release
+
+This section covers tasks to be done during each release.
+
+- [ ] Prepare the release branch and update version numbers accordingly using `kuboreleaser release --version vX.Y.Z(-rcN) prepare-branch` or ...
+ - [ ] create a new branch `release-vX.Y.Z`
+ - use `master` as base if `Z == 0`
+ - use `release` as base if `Z > 0`
+ - [ ] ![](https://img.shields.io/badge/only-RC-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)
+ - [ ] update the `CurrentVersionNumber` in [version.go](version.go) in the `release-vX.Y` branch to `vX.Y.Z(-RCN)`
+ - [example](https://github.com/ipfs/kubo/pull/9394)
+ - [ ] create a draft PR from `release-vX.Y` to `release`
+ - [example](https://github.com/ipfs/kubo/pull/9306)
+ - [ ] Cherry-pick commits from `master` to the `release-vX.Y.Z` using `git cherry-pick -x `
+ - [ ] ![](https://img.shields.io/badge/only-FINAL-green?style=flat-square) Add full changelog and contributors to the [changelog](docs/changelogs/vX.Y.md)
+ - [ ] ![](https://img.shields.io/badge/only-FINAL-green?style=flat-square) Replace the `Changelog` and `Contributors` sections of the [changelog](docs/changelogs/vX.Y.md) with the stdout of `./bin/mkreleaselog`
+ - do **NOT** copy the stderr
+ - [ ] verify all CI checks on the PR from `release-vX.Y` to `release` are passing
+ - [ ] ![](https://img.shields.io/badge/only-FINAL-green?style=flat-square) Merge the PR from `release-vX.Y` to `release` using the `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` branch
+
+- [ ] Create the release tag using `kuboreleaser release --version vX.Y.Z(-rcN) tag` or ...
+ - This is a dangerous operation! Go and Docker publishing are difficult to reverse! Have the release reviewer verify all the commands marked with ⚠️!
+ - [ ] ⚠️ ![](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)'`
+ - [ ] ⚠️ ![](https://img.shields.io/badge/only-FINAL-green?style=flat-square) tag the HEAD commit of the `release` branch using `git tag -s vX.Y.Z(-RCN) -m 'Release X.Y.Z(-RCN)'`
+ - [ ] ⚠️ verify the tag is signed and tied to the correct commit using `git show vX.Y.Z(-RCN)`
+ - [ ] ⚠️ push the tag to GitHub using `git push origin vX.Y.Z(-RCN)`
+ - do **NOT** use `git push --tags` because it pushes all your local tags
+
+- [ ] Publish the release to [DockerHub](https://hub.docker.com/r/ipfs/kubo/) using `kuboreleaser --skip-check-before --skip-run release --version vX.Y.Z(-rcN) publish-to-dockerhub` or ...
+ - [ ] Wait for [Publish docker image](https://github.com/ipfs/kubo/actions/workflows/docker-image.yml) workflow run initiated by the tag push to finish
+ - [ ] verify the image is available on [Docker Hub](https://hub.docker.com/r/ipfs/kubo/tags)
+- [ ] Publish the release to [ipfs.tech](https://dist.ipfs.tech) using `kuboreleaser release --version vX.Y.Z(-rcN) publish-to-distributions` or ...
+ - [ ] check out [ipfs/distributions](https://github.com/ipfs/distributions)
+ - [ ] 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)
+ - [ ] create and merge the PR which updates `dists/kubo/versions` and `dists/go-ipfs/versions` (![](https://img.shields.io/badge/only-FINAL-green?style=flat-square) and `dists/kubo/current_version` and `dists/go-ipfs/current_version`)
+ - [example](https://github.com/ipfs/distributions/pull/760)
+ - [ ] wait for the [CI](https://github.com/ipfs/distributions/actions/workflows/main.yml) workflow run initiated by the merge to master to finish
+ - [ ] verify the release is available on [dist.ipfs.io](https://dist.ipfs.io/#kubo)
+
+- [ ] Publish the release to [NPM](https://www.npmjs.com/package/go-ipfs?activeTab=versions) using `kuboreleaser release --version vX.Y.Z(-rcN) publish-to-npm` or ...
+ - [ ] run the [Release to npm](https://github.com/ipfs/npm-go-ipfs/actions/workflows/main.yml) workflow
+ - [ ] check [Release to npm](https://github.com/ipfs/npm-go-ipfs/actions/workflows/main.yml) workflow run logs to verify it discovered the new release
+ - [ ] verify the release is available on [NPM](https://www.npmjs.com/package/go-ipfs?activeTab=versions)
+
+- [ ] Publish the release to [GitHub](https://github.com/ipfs/kubo/releases) using `kuboreleaser release --version vX.Y.Z(-rcN) publish-to-github` or ...
+ - [ ] create a new release on [GitHub](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.17.0-rc1)
+ - [FINAL example](https://github.com/ipfs/kubo/releases/tag/v0.17.0)
+ - [ ] use the `vX.Y.Z(-RCN)` tag
+ - [ ] link to the release issue
+ - [ ] ![](https://img.shields.io/badge/only-RC-blue?style=flat-square) link to the changelog in the description
+ - [ ] ![](https://img.shields.io/badge/only-RC-blue?style=flat-square) check the `This is a pre-release` checkbox
+ - [ ] ![](https://img.shields.io/badge/only-FINAL-green?style=flat-square) copy the changelog (without the header) in the description
+ - [ ] ![](https://img.shields.io/badge/only-FINAL-green?style=flat-square) do **NOT** check the `This is a pre-release` checkbox
+ - [ ] run the [sync-release-assets](https://github.com/ipfs/kubo/actions/workflows/sync-release-assets.yml) workflow
+ - [ ] wait for the [sync-release-assets](https://github.com/ipfs/kubo/actions/workflows/sync-release-assets.yml) workflow run to finish
+ - [ ] verify the release assets are present in the [GitHub release](https://github.com/ipfs/kubo/releases/tag/vX.Y.Z(-RCN))
+
+- [ ] Promote the release using `kuboreleaser release --version vX.Y.Z(-rcN) promote` or ...
+ - [ ] 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)
+ - [ ] use `Kubo vX.Y.Z(-RCN) is out!` as the title
+ - [ ] use `kubo` and `go-ipfs` as topics
+ - [ ] repeat the title as a heading (`##`) in the description
+ - [ ] link to the GitHub Release, binaries on IPNS, docker pull command and release notes in the description
+ - [ ] pin the [IPFS Discourse](https://discuss.ipfs.tech) topic globally
+ - you can make the topic a banner if there is no banner already
+ - verify the [IPFS Discourse](https://discuss.ipfs.tech) topic was copied to:
+ - [ ] [#ipfs-chatter](https://discord.com/channels/669268347736686612/669268347736686615) in IPFS Discord
+ - [ ] [#ipfs-chatter](https://filecoinproject.slack.com/archives/C018EJ8LWH1) in FIL Slack
+ - [ ] [#ipfs-chatter:ipfs.io](https://matrix.to/#/#ipfs-chatter:ipfs.io) in Matrix
+ - [ ] ![](https://img.shields.io/badge/only-FINAL-green?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)
+ - [ ] ![](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)
+ - [ ] ![](https://img.shields.io/badge/only-FINAL-green?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)
+ - [ ] ![](https://img.shields.io/badge/only-FINAL-green?style=flat-square) ![](https://img.shields.io/badge/not-PATCH-yellow?style=flat-square) ask the marketing team to tweet about the release in [#shared-pl-marketing-requests](https://filecoinproject.slack.com/archives/C018EJ8LWH1) in FIL Slack
+ - [example](https://filecoinproject.slack.com/archives/C018EJ8LWH1/p1664885305374900)
+ - [ ] ![](https://img.shields.io/badge/only-FINAL-green?style=flat-square) ![](https://img.shields.io/badge/not-PATCH-yellow?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/)
+
+- [ ] Test the new version with `ipfs-companion` using `kuboreleaser release --version vX.Y.Z(-rcN) test-ipfs-companion` or ...
+ - [ ] run the [e2e](https://github.com/ipfs/ipfs-companion/actions/workflows/e2e.yml)
+ - use `vX.Y.Z(-RCN)` as the Kubo image version
+ - [ ] wait for the [e2e](https://github.com/ipfs/ipfs-companion/actions/workflows/e2e.yml) workflow run to finish
+
+- [ ] ![](https://img.shields.io/badge/only-FINAL-green?style=flat-square) Update Kubo in [interop](https://github.com/ipfs/interop) using `kuboreleaser release --version vX.Y.Z(-rcN) update-interop` or ...
+ - [ ] ![](https://img.shields.io/badge/only-FINAL-green?style=flat-square) check out [ipfs/interop](https://github.com/ipfs/interop)
+ - [ ] ![](https://img.shields.io/badge/only-FINAL-green?style=flat-square) run `npm install`
+ - [ ] ![](https://img.shields.io/badge/only-FINAL-green?style=flat-square) create a PR which updates `package.json` and `package-lock.json`
+ - [ ] ![](https://img.shields.io/badge/only-FINAL-green?style=flat-square) merge the PR
+
+- [ ] ![](https://img.shields.io/badge/only-FINAL-green?style=flat-square) Update Kubo in [ipfs-desktop](https://github.com/ipfs/ipfs-desktop) using `kuboreleaser release --version vX.Y.Z(-rcN) update-ipfs-desktop` or ...
+ - [ ] check out [ipfs/ipfs-desktop](https://github.com/ipfs/ipfs-desktop)
+ - [ ] run `npm install`
+ - [ ] create a PR which updates `package.json` and `package-lock.json`
+ - [ ] ![](https://img.shields.io/badge/only-FINAL-green?style=flat-square) add @SgtPooki and @whizzzkid as reviewers
+
+- [ ] ![](https://img.shields.io/badge/only-FINAL-green?style=flat-square) Update Kubo docs using `kuboreleaser release --version vX.Y.Z(-rcN) update-ipfs-docs` or ...
+ - [ ] ![](https://img.shields.io/badge/only-FINAL-green?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
+ - [ ] ![](https://img.shields.io/badge/only-FINAL-green?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
+
+- [ ] ![](https://img.shields.io/badge/only-FINAL-green?style=flat-square) Create a blog entry on [ipfs.tech](https://blog.ipfs.tech) using `kuboreleaser release --version vX.Y.Z(-rcN) update-ipfs-blog --date YYYY-MM-DD` or ...
+ - [ ] ![](https://img.shields.io/badge/only-FINAL-green?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)
+ - [ ] ![](https://img.shields.io/badge/only-FINAL-green?style=flat-square) merge the PR
+ - [ ] ![](https://img.shields.io/badge/only-FINAL-green?style=flat-square) verify the blog entry was published
+
+- [ ] ![](https://img.shields.io/badge/only-FINAL-green?style=flat-square) Merge the [release](https://github.com/ipfs/kubo/tree/release) branch back into [master](https://github.com/ipfs/kubo/tree/master), ignoring the changes to [version.go](version.go) (keep the `-dev`) version, using `kuboreleaser release --version vX.Y.Z(-rcN) merge-branch` or ...
+ - [ ] create a new branch `merge-release-vX.Y.Z` from `release`
+ - [ ] create and merge a PR from `merge-release-vX.Y.Z` to `master`
+
+- [ ] ![](https://img.shields.io/badge/only-FINAL-green?style=flat-square) ![](https://img.shields.io/badge/not-PATCH-yellow?style=flat-square) Prepare for the next release using `kuboreleaser release --version vX.Y.Z(-rcN) prepare-next` or ...
+ - [ ] ![](https://img.shields.io/badge/only-FINAL-green?style=flat-square) ![](https://img.shields.io/badge/not-PATCH-yellow?style=flat-square) Create the next [changelog](https://github.com/ipfs/kubo/blob/master/docs/changelogs/vX.(Y+1).md)
+ - [ ] ![](https://img.shields.io/badge/only-FINAL-green?style=flat-square) ![](https://img.shields.io/badge/not-PATCH-yellow?style=flat-square) Link to the new changelog in the [CHANGELOG.md](CHANGELOG.md) file
+ - [ ] ![](https://img.shields.io/badge/only-FINAL-green?style=flat-square) ![](https://img.shields.io/badge/not-PATCH-yellow?style=flat-square) Create the next release issue
+
+- [ ] ![](https://img.shields.io/badge/only-FINAL-green?style=flat-square) ![](https://img.shields.io/badge/not-PATCH-yellow?style=flat-square) Create a dependency update PR
+ - [ ] ![](https://img.shields.io/badge/only-FINAL-green?style=flat-square) ![](https://img.shields.io/badge/not-PATCH-yellow?style=flat-square) check out [ipfs/kubo](https://github.com/ipfs/kubo)
+ - [ ] ![](https://img.shields.io/badge/only-FINAL-green?style=flat-square) ![](https://img.shields.io/badge/not-PATCH-yellow?style=flat-square) run `go get -u` in root directory
+ - [ ] ![](https://img.shields.io/badge/only-FINAL-green?style=flat-square) ![](https://img.shields.io/badge/not-PATCH-yellow?style=flat-square) run `go mod tidy` in root directory
+ - [ ] ![](https://img.shields.io/badge/only-FINAL-green?style=flat-square) ![](https://img.shields.io/badge/not-PATCH-yellow?style=flat-square) run `go mod tidy` in `docs/examples/kubo-as-a-library` directory
+ - [ ] ![](https://img.shields.io/badge/only-FINAL-green?style=flat-square) ![](https://img.shields.io/badge/not-PATCH-yellow?style=flat-square) create a PR which updates `go.mod` and `go.sum`
+ - [ ] ![](https://img.shields.io/badge/only-FINAL-green?style=flat-square) ![](https://img.shields.io/badge/not-PATCH-yellow?style=flat-square) add the PR to the next release milestone
+- [ ] ![](https://img.shields.io/badge/only-FINAL-green?style=flat-square) Close the release issue
## How to contribute?