mirror of
https://github.com/ipfs/kubo.git
synced 2025-12-19 01:30:17 +08:00
14 KiB
14 KiB
✅ Release Checklist (vX.Y.Z[-rcN])
Labels
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.
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 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/
The release
This section covers tasks to be done during each release.
1. Prepare release branch
- 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
2. Tag release
- 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 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 --tagsbecause it pushes all your local tags
- ⚠️ do NOT use
3. Publish
- 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-releasecheckboxcopy 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
4. After Publishing
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 use
Squash 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)
- ⚠️ do NOT use
- 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_tidycreate a PR which updates
go.modandgo.sumadd the PR to the next release milestone
Create the next release issue
Close the release issue