kubo icon indicating copy to clipboard operation
kubo copied to clipboard

Release 0.36

Open lidel opened this issue 7 months ago • 3 comments

Part of ongoing maintenance of key libraries and services https://github.com/ipshipyard/roadmaps/issues/1 and https://github.com/ipshipyard/roadmaps/issues/6

Meta

  • Release owner: @lidel
  • Release reviewer/backup: @gammazero
  • Expected RC1 date: ~ Jun 11 or 18th
  • 🚢 Expected final release date: Jun 25 or July 9th
  • Release PR: TBD
  • Accompanying PR for improving the release process: N/A
  • Internal Staging tests by Shipyard: TBD
  • Changelog: https://github.com/ipfs/kubo/blob/master/docs/changelogs/v0.36.md

Items In Scope

Required

This release continues focus on HTTP retrieval, provider system improvements, and reducing cost of running bitswap's libp2p client/server.

  • [x] go-libp2p with quic-go >= 0.52
  • [x] panic on daemon shutdown fix: boxo with https://github.com/ipfs/boxo/pull/920
  • [x] HTTP
    • [x] boxo with https://github.com/ipfs/boxo/pull/919
    • [x] https://github.com/ipfs/kubo/pull/10836
  • [x] https://github.com/ipfs/kubo/pull/10818 to fix https://github.com/ipfs/kubo/issues/10808
  • [x] https://github.com/ipfs/kubo/pull/10825
  • [ ] p2p-forge/client@main with https://github.com/ipfs/kubo/pull/10835
  • [ ] switch to final go-libp2p release
  • [ ] switch to final p2p-forge/client release

Issues found ~RC1

  • [ ] https://github.com/ipfs/boxo/issues/954
  • [ ] https://github.com/ipfs/boxo/issues/955
  • [ ] https://github.com/libp2p/go-libp2p-kad-dht/issues/1001

Nice To Have (Optional)

  • [x] https://github.com/ipfs/kubo/pull/10827
  • [ ] other kad-dht provider/reprovider improvements
    • [ ] https://github.com/ipfs/kubo/pull/10834 (wip, likely 0.37+)
      • [ ] https://github.com/libp2p/go-libp2p-kad-dht/pull/1082
      • [ ] (parked until reprovider refactor) https://github.com/ipfs/boxo/issues/901
      • [ ] (parked until reprovider refactor) https://github.com/ipfs/kubo/issues/10832
  • [ ] boxo/gateway with configurable limits (and sane limit enabled by default)
    • [ ] https://github.com/ipfs/boxo/pull/887
    • [ ] https://github.com/ipfs/boxo/pull/812
  • [ ] https://github.com/ipfs/kubo/pull/8648
  • [ ] https://github.com/ipfs/kubo/issues/9759
  • [x] https://github.com/ipfs/kubo/pull/10801
  • [ ] https://github.com/ipfs/kubo/pull/8648 as fix for https://github.com/ipfs/kubo/issues/7183#issuecomment-2658029979
  • [ ] https://github.com/ipfs/kubo/issues/10091
    • [x] https://github.com/ipfs/kubo/issues/10570 (depends on autonatv2 client)
  • [ ] Denylist support fixes and improvements
    • [ ] https://github.com/ipfs-shipyard/nopfs/issues/34 (NOfs content filtering is not applied to bitswap)
    • [ ] https://github.com/ipfs/rainbow/issues/126 (same applies to Kubo)
      • [ ] https://github.com/ipfs/kubo/issues/10361
      • [ ] https://github.com/ipfs-shipyard/nopfs/issues/39
      • [ ] https://github.com/ipfs-shipyard/nopfs/issues/38
  • [ ] https://github.com/ipfs/kubo/pull/9684
  • [ ] https://github.com/ipfs/kubo/issues/10824
  • [ ] https://github.com/ipfs/kubo/pull/10833

lidel avatar May 21 '25 22:05 lidel

Perfored internal smoke-test with ipfs/kubo:master-2025-06-17-eb6cc02 on Shipyar's staging gateway and collab cluster boxes (internal notes).

Found cosmetic ERROR logs:

  • https://github.com/ipfs/boxo/issues/954
  • https://github.com/ipfs/boxo/issues/955
  • https://github.com/libp2p/go-libp2p-kad-dht/issues/1001

but no red flags since 2025-06-17 16:25 UTC.

We will start 0.36.0-rc1 release dance.

lidel avatar Jun 18 '25 14:06 lidel

✅ Release Checklist (v0.36.0-rc1)

1. Prepare release branch

  • [x] Prepare the release branch and update version numbers accordingly
    • [x] create a new branch release-vX.Y.Z
      • use master as base if Z == 0
      • use release as base if Z > 0
    • [ ] update the CurrentVersionNumber in version.go in the master branch to vX.Y+1.0-dev (example)
    • [x] update the CurrentVersionNumber in version.go in the release-vX.Y.Z branch to vX.Y.Z(-rcN) (example)
    • [x] create a draft PR from release-vX.Y.Z to release (example)
    • [x] Cherry-pick commits from master to the release-vX.Y.Z using git cherry-pick -x <commit> (example)
      • NOTE: cherry-picking with -x is important
    • [ ] Replace the Changelog and Contributors sections of the changelog with the stdout (do NOT copy the stderr) of ./bin/mkreleaselog.
      • NOTE: mkreleaselog expects your $GOPATH/src/github.com/ipfs/kubo to include latest commits from release-vX.Y.Z
    • [x] verify all CI checks on the PR from release-vX.Y.Z to release are passing
    • [ ] Merge the PR from release-vX.Y.Z 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.Z branch

2. Tag release

  • [x] 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 !
    • [x] tag the HEAD commit using git tag -s vX.Y.Z(-rcN) -m 'Prerelease X.Y.Z(-rcN)'
    • [ ] tag the HEAD commit of the release branch using git tag -s vX.Y.Z -m 'Release X.Y.Z'
    • [x] ⚠️ verify the tag is signed and tied to the correct commit using git show vX.Y.Z(-rcN)
    • [x] 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

3. Publish

  • [x] Publish Docker image to DockerHub
  • [x] Publish the release to dist.ipfs.tech
    • [ ] check out ipfs/distributions
    • [ ] create new branch: run git checkout -b release-kubo-X.Y.Z(-rcN)
    • [x] run ./dist.sh add-version kubo vX.Y.Z(-rcN) to add the new version to the versions file (usage)
    • [x] Verify ipfs/distributions's .tool-versions's golang entry is set to the latest go release on the major go branch Kubo is being tested on (see go-version:). If not, update .tool-versions to match the latest golang.
    • [x] create and merge the PR which updates dists/kubo/versions and dists/go-ipfs/versions (NOTE: will also have dists/kubo/current and dists/go-ipfs/currentexample)
    • [ ] wait for the CI workflow run initiated by the merge to master to finish
    • [x] verify the release is available on dist.ipfs.tech
  • [x] 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
    • [x] verify the release is available on NPM
  • [x] Publish the release to GitHub kubo/releases

4. After Publishing

  • [ ] Merge the release branch back into master
    • [ ] Create a new branch merge-release-vX.Y.Z from release
    • [ ] Create the next ./docs/changelogs/vA.B.md and link to the new changelog from the ./CHANGELOG.md file
    • [ ] Create and merge a PR from merge-release-vX.Y.Z to master
      • ⚠️ do NOT use Squash and merge nor Rebase and merge because we need to be able to sign the merge commit
      • ⚠️ NOTE: make sure to ignore the changes to version.go (keep the -dev in master)
  • [ ] Update Kubo staging environment, see the Running Kubo tests on staging for details.
    • [ ] Test last release against the current RC
    • [ ] Test last release against the current one
  • [ ] Promote the release
  • [x] 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.json and package-lock.json

Skipped for RC1:

  • [ ] Update Kubo docs at docs.ipfs.tech:
  • [ ] 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.mod in the root directory (NOTE: do not run go get -u as it will upgrade indirect dependencies which may cause problems)
    • [ ] run make mod_tidy
    • [ ] create a PR which updates go.mod and go.sum
    • [ ] add the PR to the next release milestone
  • [ ] Create the next release issue
  • [ ] Close the release issue

lidel avatar Jun 18 '25 14:06 lidel

Kubo v0.36.0-rc2 is out!

Early testers ping for RC1 testing:

  • [ ] Charity Engine (@rytiss, @tristanolive)
  • [ ] Fission (@bmann)
  • [ ] Infura (@MichaelMure)
  • [ ] OrbitDB (@haydenyoung)
  • [ ] Pinata (@obo20)
  • [ ] Shipyard (@cewood, @ns4plabs)
  • [ ] Siderus (@koalalorenzo)
  • [ ] Textile (@sanderpick)
  • [ ] @RubenKelevra

You're getting this message because you're listed here. Open PR to update that list if you no longer want to be included in these pings.

lidel avatar Jun 18 '25 21:06 lidel

✅ Release Checklist (v0.36.0-rc2)

1. Prepare release branch

  • [x] Prepare the release branch and update version numbers accordingly
    • [ ] create a new branch release-vX.Y.Z
      • use master as base if Z == 0
      • use release as base if Z > 0
    • [ ] update the CurrentVersionNumber in version.go in the master branch to vX.Y+1.0-dev (example)
    • [x] update the CurrentVersionNumber in version.go in the release-vX.Y.Z branch to vX.Y.Z(-rcN) (example)
    • [ ] create a draft PR from release-vX.Y.Z to release (example)
    • [x] Cherry-pick commits from master to the release-vX.Y.Z using git cherry-pick -x <commit> (example)
      • NOTE: cherry-picking with -x is important
    • [ ] Replace the Changelog and Contributors sections of the changelog with the stdout (do NOT copy the stderr) of ./bin/mkreleaselog.
      • NOTE: mkreleaselog expects your $GOPATH/src/github.com/ipfs/kubo to include latest commits from release-vX.Y.Z
    • [x] verify all CI checks on the PR from release-vX.Y.Z to release are passing
    • [ ] Merge the PR from release-vX.Y.Z 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.Z branch

2. Tag release

  • [x] 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 release branch using git tag -s vX.Y.Z -m 'Release X.Y.Z'
    • [x] ⚠️ verify the tag is signed and tied to the correct commit using git show vX.Y.Z(-rcN)
    • [x] 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

3. Publish

  • [x] Publish Docker image to DockerHub
  • [x] Publish the release to dist.ipfs.tech
    • [ ] check out ipfs/distributions
    • [ ] create new branch: run git checkout -b release-kubo-X.Y.Z(-rcN)
    • [x] run ./dist.sh add-version kubo vX.Y.Z(-rcN) to add the new version to the versions file (usage)
    • [x] Verify ipfs/distributions's .tool-versions's golang entry is set to the latest go release on the major go branch Kubo is being tested on (see go-version:). If not, update .tool-versions to match the latest golang.
    • [ ] FIX APPLE NOTARIZATION: https://github.com/ipfs/distributions/pull/1149#issuecomment-3050394068
    • [x] create and merge the PR which updates dists/kubo/versions and dists/go-ipfs/versions (NOTE: will also have dists/kubo/current and dists/go-ipfs/currentexample)
    • [x] wait for the CI workflow run initiated by the merge to master to finish
    • [x] verify the release is available on dist.ipfs.tech
  • [x] 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
  • [x] Publish the release to GitHub kubo/releases

4. After Publishing

  • [ ] Merge the release branch back into master
    • [ ] Create a new branch merge-release-vX.Y.Z from release
    • [ ] Create the next ./docs/changelogs/vA.B.md and link to the new changelog from the ./CHANGELOG.md file
    • [ ] Create and merge a PR from merge-release-vX.Y.Z to master
      • ⚠️ do NOT use Squash and merge nor Rebase and merge because we need to be able to sign the merge commit
      • ⚠️ NOTE: make sure to ignore the changes to version.go (keep the -dev in master)
  • [x] Update Kubo staging environment, see the Running Kubo tests on staging for details.
    • [x] Test last release against the current RC
    • [ ] Test last release against the current one
  • [x] Promote the release
  • [x] 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.json and package-lock.json
  • [ ] Update Kubo docs at docs.ipfs.tech:
  • [ ] 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.mod in the root directory (NOTE: do not run go get -u as it will upgrade indirect dependencies which may cause problems)
    • [ ] run make mod_tidy
    • [ ] create a PR which updates go.mod and go.sum
    • [ ] add the PR to the next release milestone
  • [ ] Create the next release issue
  • [ ] Close the release issue

lidel avatar Jul 08 '25 19:07 lidel

Kubo v0.36.0-rc2 is out!

Early testers ping for RC1 testing:

  • [ ] Charity Engine (@rytiss, @tristanolive)
  • [ ] Fission (@bmann)
  • [ ] Infura (@MichaelMure)
  • [ ] OrbitDB (@haydenyoung)
  • [ ] Pinata (@obo20)
  • [ ] Shipyard (@cewood, @ns4plabs)
  • [ ] Siderus (@koalalorenzo)
  • [ ] Textile (@sanderpick)
  • [ ] @RubenKelevra

You're getting this message because you're listed here. Open PR to update that list if you no longer want to be included in these pings.

lidel avatar Jul 08 '25 23:07 lidel

RC2 looking good, our (Shipyard) staging and test boxes show (private notes) the same/better success rates, but thanks to the reduced bitswap broadcast it is handling high load spikes better, and does not OOM.

Proceeding with final release. It will be the same code as RC2.

lidel avatar Jul 14 '25 17:07 lidel

✅ Release Checklist (v0.36.0)

1. Prepare release branch

  • [x] Prepare the release branch and update version numbers accordingly
    • [ ] create a new branch release-vX.Y.Z
      • use master as base if Z == 0
      • use release as base if Z > 0
    • [ ] update the CurrentVersionNumber in version.go in the master branch to vX.Y+1.0-dev (example)
    • [x] update the CurrentVersionNumber in version.go in the release-vX.Y.Z branch to vX.Y.Z(-rcN) (example)
    • [ ] create a draft PR from release-vX.Y.Z to release (example)
    • [ ] Cherry-pick commits from master to the release-vX.Y.Z using git cherry-pick -x <commit> (example)
      • NOTE: cherry-picking with -x is important
    • [x] verify all CI checks on the PR from release-vX.Y.Z to release are passing
    • [x] Replace the Changelog and Contributors sections of the changelog with the stdout (do NOT copy the stderr) of ./bin/mkreleaselog.
      • NOTE: mkreleaselog expects your $GOPATH/src/github.com/ipfs/kubo to include latest commits from release-vX.Y.Z
    • [x] Merge the PR from release-vX.Y.Z 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.Z branch

2. Tag release

  • [x] 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)'
    • [x] tag the HEAD commit of the release branch using git tag -s vX.Y.Z -m 'Release X.Y.Z'
    • [x] ⚠️ verify the tag is signed and tied to the correct commit using git show vX.Y.Z(-rcN)
    • [x] 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

3. Publish

  • [x] Publish Docker image to DockerHub
  • [x] Publish the release to dist.ipfs.tech
    • [ ] check out ipfs/distributions
    • [ ] create new branch: run git checkout -b release-kubo-X.Y.Z(-rcN)
    • [x] Verify ipfs/distributions's .tool-versions's golang entry is set to the latest go release on the major go branch Kubo is being tested on (see go-version:). If not, update .tool-versions to match the latest golang.
    • [ ] run ./dist.sh add-version kubo vX.Y.Z(-rcN) to add the new version to the versions file (usage)
    • [ ] create and merge the PR which updates dists/kubo/versions (NOTE: will also have dists/kubo/currentexample)
    • [x] wait for the CI workflow run initiated by the merge to master to finish
    • [x] verify the release is available on dist.ipfs.tech
  • [x] Publish the release to NPM
    • [ ] manually dispatch the Release to npm workflow if it was not executed already and verify it discovered the new release
    • [x] verify the release is available on NPM
  • [x] Publish the release to GitHub kubo/releases
    • [ ] create a new release
      • 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
    • [x] run the sync-release-assets workflow and verify the release assets are attached to the GitHub release

4. After Publishing

  • [x] Merge the release branch back into master
    • [x] Create a new branch merge-release-vX.Y.Z from release
    • [x] Create the next ./docs/changelogs/vA.B.md and link to the new changelog from the ./CHANGELOG.md file
    • [x] Create and merge a PR from merge-release-vX.Y.Z to master
      • ⚠️ do NOT use Squash and merge nor Rebase and merge because we need to be able to sign the merge commit
      • ⚠️ NOTE: make sure to ignore the changes to version.go (keep the -dev in master)
  • [x] Update ipshipyard/waterworks-infra
    • [ ] Update Kubo staging environment, see the Running Kubo tests on staging for details.
      • [ ] Test last release against the current RC
      • [ ] Test last release against the current one
    • [ ] Update collab cluster boxes to the tagged release (final or RC)
    • [ ] Update libp2p bootstrappers to the tagged release (final or RC)
  • [x] Promote the release
  • [x] Manually smoke-test the new version with IPFS Companion Browser Extension
  • [x] Update Kubo in ipfs-desktop
    • [x] create a PR which updates kubo version to the tagged version in package.json and package-lock.json
    • [ ] switch to final release and merge
  • [x] Update Kubo docs at docs.ipfs.tech:
  • [x] Create a blog entry on blog.ipfs.tech
    • [ ] create a PR which adds a release note for the new Kubo version (example)
    • [x] merge the PR
    • [x] verify the blog entry was published
  • [ ] Create a dependency update PR
    • [ ] check out ipfs/kubo
    • [ ] 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)
    • [ ] run make mod_tidy
    • [ ] create a PR which updates go.mod and go.sum
    • [ ] add the PR to the next release milestone
  • [ ] Create the next release issue
  • [x] Close the release issue

lidel avatar Jul 14 '25 17:07 lidel

Kubo 0.36 is out 🚢

  • https://github.com/ipfs/kubo/releases/tag/v0.36.0

lidel avatar Jul 14 '25 21:07 lidel

IPFS Desktop 0.44 with Kubo 0.36 is out 🚢

  • https://github.com/ipfs/ipfs-desktop/releases/tag/v0.44.0

lidel avatar Jul 15 '25 23:07 lidel

Caveat on macOS

We had a small regression with macOS binaries (https://github.com/ipfs/kubo/issues/10862). MacOS binaries were updated and are now correctly signed, however the NPM package for macOS can't be updated and still may not be correctly signed.

This is not a problem for IPFS Desktop, which has separate signing and notarization process of the entire DMG image, but might be a problem for some JS devs running projects where Kubo is a dependency used for tests.

We will likely have 0.37 in ~3 weeks, so if the only use of NPM kubo is for CI tests, it is probably ok for macOS devs to keep package.json in those projects at 0.35 for now.

lidel avatar Jul 15 '25 23:07 lidel