If an item should be executed for a specific release type, it should be labeled with one of the following labels:
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:
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 configured in local git and in GitHub
- admin access to IPFS Discourse
- ask the previous release owner (or @2color) for an invite
- access to #shared-pl-marketing-requests channel in FIL Slack
- ask the previous release owner for an invite
- access to IPFS network metrics dashboards in Grafana
- kuboreleaser checked out on your system (only if you're using kuboreleaser)
- Thunderdome checked out on your system and configured (see the Thunderdome release docs for setup)
- docker installed on your system (only if you're using kuboreleaser)
- npm installed on your system (only if you're NOT using kuboreleaser)
- zsh installed on your system
- 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
- you can also symlink your clone to the expected location by running
- Reddit account
- Upgrade Go used in CI to the latest patch release available in CircleCI in:
- Verify there is nothing left for release
- Create a release process improvement PR
- update the release issue template as you go
- link it in the Meta section
This section covers tasks to be done during each release.
- Prepare the release branch and update version numbers accordingly
using
./kuboreleaser --skip-check-before release --version vX.Y.Z(-rcN) prepare-branch
or ...- create a new branch
release-vX.Y.Z
- use
master
as base ifZ == 0
- use
release
as base ifZ > 0
- use
- update the
CurrentVersionNumber
in version.go in themaster
branch tovX.Y+1.0-dev
- update the
CurrentVersionNumber
in version.go in therelease-vX.Y
branch tovX.Y.Z(-RCN)
- create a draft PR from
release-vX.Y
torelease
- Cherry-pick commits from
master
to therelease-vX.Y.Z
usinggit cherry-pick -x <commit>
- Add full changelog and contributors to the changelog
- Replace the
Changelog
andContributors
sections of the changelog with the stdout of./bin/mkreleaselog
. Note that the command expects your$GOPATH/src/github.com/ipfs/kubo
to include latest commits fromrelease-vX.Y
- do NOT copy the stderr
- Replace the
- verify all CI checks on the PR from
release-vX.Y
torelease
are passing - Merge the PR from
release-vX.Y
torelease
using theCreate a merge commit
- do NOT use
Squash and merge
norRebase and merge
because we need to be able to sign the merge commit - do NOT delete the
release-vX.Y
branch
- do NOT use
- create a new 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
⚠️ ! -
⚠️ tag the HEAD commit usinggit tag -s vX.Y.Z(-RCN) -m 'Prerelease X.Y.Z(-RCN)'
-
⚠️ tag the HEAD commit of therelease
branch usinggit tag -s vX.Y.Z -m 'Release X.Y.Z'
-
⚠️ verify the tag is signed and tied to the correct commit usinggit show vX.Y.Z(-RCN)
-
⚠️ push the tag to GitHub usinggit push origin vX.Y.Z(-RCN)
- do NOT use
git push --tags
because it pushes all your local tags
- do NOT use
- This is a dangerous operation! Go and Docker publishing are difficult to reverse! Have the release reviewer verify all the commands marked with
- Verify ipfs/distributions's
.tool-versions
'sgolang
entry is set to the latest go release on the major go branch Kubo is being tested on (seego-version:
). - Publish to Dockerhub, NPM, and dist.ipfs.tech and GitHub using
./kuboreleaser --skip-check-before --skip-run release --version vX.Y.Z(-rcN) publish-to-all
or follow each step below:- Publish the release to DockerHub
using
./kuboreleaser --skip-check-before --skip-run release --version vX.Y.Z(-rcN) publish-to-dockerhub
or ...- Wait for Publish docker image workflow run initiated by the tag push to finish
- verify the image is available on Docker Hub
- Publish the release to dist.ipfs.tech
using
./kuboreleaser release --version vX.Y.Z(-rcN) publish-to-distributions
or ...- check out ipfs/distributions
- run
./dist.sh add-version kubo vX.Y.Z(-RCN)
to add the new version to theversions
file - create and merge the PR which updates
dists/kubo/versions
anddists/go-ipfs/versions
( anddists/kubo/current_version
anddists/go-ipfs/current_version
) - wait for the CI workflow run initiated by the merge to master to finish
- verify the release is available on dist.ipfs.tech
- Publish the release to NPM
using
./kuboreleaser release --version vX.Y.Z(-rcN) publish-to-npm
(⚠️ you might need to run the command a couple of times because GHA might not be able to see the new distribution straight away due to caching) or ...- run the Release to npm workflow
- check Release to npm workflow run logs to verify it discovered the new release
- verify the release is available on NPM
- Publish the release to GitHub
using
./kuboreleaser release --version vX.Y.Z(-rcN) publish-to-github
or ...- create a new release on GitHub
- RC example
- FINAL example
- use the
vX.Y.Z(-RCN)
tag - link to the release issue
- link to the changelog in the description
- check the
This is a pre-release
checkbox - copy the changelog (without the header) in the description
- do NOT check the
This is a pre-release
checkbox
- run the sync-release-assets workflow
- wait for the sync-release-assets workflow run to finish
- verify the release assets are present in the GitHub release
- create a new release on GitHub
- Publish the release to DockerHub
- Update Kubo staging environment, see the Running Kubo tests on staging for details.
- Promote the release
using
./kuboreleaser release --version vX.Y.Z(-rcN) promote
or ...- create an IPFS Discourse topic
- prerelease example
- release example
- use
Kubo vX.Y.Z(-RCN) is out!
as the title - use
kubo
andgo-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 topic globally
- you can make the topic a banner if there is no banner already
- verify the IPFS Discourse topic was copied to:
- #ipfs-chatter in IPFS Discord
- #ipfs-chatter in FIL Slack
- #ipfs-chatter:ipfs.io in Matrix
- Add the link to the IPFS Discourse topic to the GitHub Release description
- create an issue comment mentioning early testers on the release issue
- create an issue comment linking to the release on the release issue
- ask the marketing team to tweet about the release in #shared-pl-marketing-requests in FIL Slack
- post the link to the GitHub Release to Reddit
- create an IPFS Discourse topic
-
Test the new version with(currently skipped)ipfs-companion
- Update Kubo in ipfs-desktop
using
./kuboreleaser release --version vX.Y.Z(-rcN) update-ipfs-desktop
or ...- check out ipfs/ipfs-desktop
- run
npm install
- create a PR which updates
package.json
andpackage-lock.json
- add @SgtPooki as reviewer
- Update Kubo docs
using
./kuboreleaser release --version vX.Y.Z(-rcN) update-ipfs-docs
or ...- run the update-on-new-ipfs-tag.yml workflow
- merge the PR created by the update-on-new-ipfs-tag.yml workflow run
- Create a blog entry on blog.ipfs.tech
- Merge the release branch back into master, ignoring the changes to 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
fromrelease
- create and merge a PR from
merge-release-vX.Y.Z
tomaster
- create a new branch
- Prepare for the next release
using
./kuboreleaser release --version vX.Y.Z(-rcN) prepare-next
or ...- Create the next changelog
- Link to the new changelog in the CHANGELOG.md file
- Create the next release issue
- Create a dependency update PR
- check out ipfs/kubo
- go over direct dependencies from
go.mod
in the root directory (NOTE: do not rungo get -u
as it will upgrade indirect dependencies which may cause problems) - run
make mod_tidy
- create a PR which updates
go.mod
andgo.sum
- add the PR to the next release milestone
- Close the release issue