If an item should be executed only for a specific release type, it is labeled with:
execute ONLY when releasing a Release Candidate
execute ONLY when releasing a Final Release
do NOT execute when releasing a Patch Release
Otherwise, it means a step should be executed for ALL release types.
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
- docker installed on your system
- npm 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
Upgrade Go used in CI to the latest patch release available at https://go.dev/dl/
This section covers tasks to be done during each release.
- Prepare the release branch and update version numbers accordingly
- create a new branch
release-vX.Y.Z- use
masteras base ifZ == 0 - use
releaseas base ifZ > 0
- use
-
update the
CurrentVersionNumberin version.go in themasterbranch tovX.Y+1.0-dev(example) - update the
CurrentVersionNumberin version.go in therelease-vX.Y.Zbranch tovX.Y.Z(-rcN)(example) - create a draft PR from
release-vX.Y.Ztorelease(example) - Cherry-pick commits from
masterto therelease-vX.Y.Zusinggit cherry-pick -x <commit>(example)- NOTE: cherry-picking with
-xis important
- NOTE: cherry-picking with
-
Replace the
ChangelogandContributorssections of the changelog with the stdout (do NOT copy the stderr) of./bin/mkreleaselog.- NOTE:
mkreleaselogexpects your$GOPATH/src/github.com/ipfs/kuboto include latest commits fromrelease-vX.Y.Z
- NOTE:
- verify all CI checks on the PR from
release-vX.Y.Ztoreleaseare passing -
Merge the PR from
release-vX.Y.Ztoreleaseusing theCreate a merge commit- do NOT use
Squash and mergenorRebase and mergebecause we need to be able to sign the merge commit - do NOT delete the
release-vX.Y.Zbranch
- do NOT use
- create a new branch
- Create the release tag
⚠️ NOTE: 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 using
git tag -s vX.Y.Z(-rcN) -m 'Prerelease X.Y.Z(-rcN)' -
tag the HEAD commit of the
releasebranch 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 using
git push origin vX.Y.Z(-rcN)⚠️ do NOT usegit push --tagsbecause it pushes all your local tags
- Publish Docker image to DockerHub
- Wait for Publish docker image workflow run initiated by the tag push to finish
- verify the image is available on Docker Hub → tags
- Publish the release to dist.ipfs.tech
- check out ipfs/distributions
- create new branch: run
git checkout -b release-kubo-X.Y.Z(-rcN) - run
./dist.sh add-version kubo vX.Y.Z(-rcN)to add the new version to theversionsfile (usage) - Verify ipfs/distributions's
.tool-versions'sgolangentry is set to the latest go release on the major go branch Kubo is being tested on (seego-version:). If not, update.tool-versionsto match the latest golang. - create and merge the PR which updates
dists/kubo/versionsanddists/go-ipfs/versions(NOTE:will also have
dists/kubo/currentanddists/go-ipfs/current– example) - 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
- manually dispatch 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 kubo/releases
- create a new release on github.com/ipfs/kubo/releases
- 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-releasecheckbox -
copy the changelog (without the header) in the description
-
do NOT check the
This is a pre-releasecheckbox
- 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.com/ipfs/kubo/releases
-
Merge the release branch back into master
- Create a new branch
merge-release-vX.Y.Zfromrelease - Create the next
./docs/changelogs/vA.B.mdand link to the new changelog from the./CHANGELOG.mdfile - Create and merge a PR from
merge-release-vX.Y.Ztomaster⚠️ do NOT useSquash and mergenorRebase and mergebecause we need to be able to sign the merge commit⚠️ NOTE: make sure to ignore the changes to version.go (keep the-devinmaster)
- Create a new branch
- Update Kubo staging environment, see the Running Kubo tests on staging for details.
- Promote the release
- create an IPFS Discourse topic (prerelease example, release example)
- use
Kubo vX.Y.Z(-rcN) is out!as the title andkuboandgo-ipfsas tags - 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
- use
- 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 (example)
-
create an issue comment mentioning early testers on the release issue (example)
-
create an issue comment linking to the release on the release issue (example)
-
promote on bsky.app (example)
-
promote on x.com (example)
-
post the link to the GitHub Release to Reddit (example)
- create an IPFS Discourse topic (prerelease example, release example)
- Manually smoke-test the new version with IPFS Companion Browser Extension
-
Update Kubo in ipfs-desktop
- check out ipfs/ipfs-desktop
- run
npm install - create a PR which updates
package.jsonandpackage-lock.json
-
Update Kubo docs at docs.ipfs.tech:
-
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
-
create a PR which adds a release note for the new Kubo version (example)
-
merge the PR
-
verify the blog entry was published
-
-
Create a dependency update PR
-
check out ipfs/kubo
-
go over direct dependencies from
go.modin the root directory (NOTE: do not rungo get -uas it will upgrade indirect dependencies which may cause problems) -
run
make mod_tidy -
create a PR which updates
go.modandgo.sum -
add the PR to the next release milestone
-
-
Create the next release issue
-
Close the release issue