Merge pull request #10868 from ipfs/merge-release-v0.36.0
Some checks failed
Docker Build / docker-build (push) Waiting to run
Gateway Conformance / gateway-conformance (push) Waiting to run
Gateway Conformance / gateway-conformance-libp2p-experiment (push) Waiting to run
Go Build / go-build (push) Waiting to run
Go Check / go-check (push) Waiting to run
Go Lint / go-lint (push) Waiting to run
Go Test / go-test (push) Waiting to run
Interop / interop-prep (push) Waiting to run
Interop / helia-interop (push) Blocked by required conditions
Interop / ipfs-webui (push) Blocked by required conditions
Sharness / sharness-test (push) Waiting to run
Spell Check / spellcheck (push) Waiting to run
CodeQL / codeql (push) Has been cancelled

chore: merge release v0.36.0
This commit is contained in:
Marcin Rataj 2025-07-14 22:26:16 +02:00 committed by GitHub
commit 1131dde620
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
8 changed files with 400 additions and 20 deletions

View File

@ -1,5 +1,6 @@
# Kubo Changelogs
- [v0.37](docs/changelogs/v0.37.md)
- [v0.36](docs/changelogs/v0.36.md)
- [v0.35](docs/changelogs/v0.35.md)
- [v0.34](docs/changelogs/v0.34.md)

View File

@ -168,7 +168,7 @@ From there:
- Open/extract the archive.
- Move kubo (`ipfs`) to your path (`install.sh` can do it for you).
If you are unable to access [dist.ipfs.tech](https://dist.ipfs.tech#kubo), you can also download kubo (go-ipfs) from:
If you are unable to access [dist.ipfs.tech](https://dist.ipfs.tech#kubo), you can also download kubo from:
- this project's GitHub [releases](https://github.com/ipfs/kubo/releases/latest) page
- `/ipns/dist.ipfs.tech` at [dweb.link](https://dweb.link/ipns/dist.ipfs.tech#kubo) gateway
@ -176,7 +176,7 @@ If you are unable to access [dist.ipfs.tech](https://dist.ipfs.tech#kubo), you c
##### Downloading builds using IPFS
List the available versions of Kubo (go-ipfs) implementation:
List the available versions of Kubo implementation:
```console
$ ipfs cat /ipns/dist.ipfs.tech/kubo/versions
@ -238,7 +238,7 @@ https://packages.gentoo.org/packages/net-p2p/kubo
#### <a name="nix-linux">Nix</a>
With the purely functional package manager [Nix](https://nixos.org/nix/) you can install kubo (go-ipfs) like this:
With the purely functional package manager [Nix](https://nixos.org/nix/) you can install kubo like this:
```
$ nix-env -i kubo
@ -258,11 +258,11 @@ You can also install it through the Solus software center.
#### openSUSE
[Community Package for go-ipfs](https://software.opensuse.org/package/go-ipfs)
[Community Package for kubo](https://software.opensuse.org/package/kubo)
#### Guix
[Community Package for go-ipfs](https://packages.guix.gnu.org/packages/go-ipfs/0.11.0/) is now out-of-date.
[Community Package for kubo](https://packages.guix.gnu.org/search/?query=kubo) is available.
#### Snap
@ -323,7 +323,7 @@ PS> scoop install kubo
#### MacPorts
The package [ipfs](https://ports.macports.org/port/ipfs) currently points to kubo (go-ipfs) and is being maintained.
The package [ipfs](https://ports.macports.org/port/ipfs) currently points to kubo and is being maintained.
```
$ sudo port install ipfs
@ -383,7 +383,7 @@ $ cd kubo
$ make install
```
Alternatively, you can run `make build` to build the go-ipfs binary (storing it in `cmd/ipfs/ipfs`) without installing it.
Alternatively, you can run `make build` to build the kubo binary (storing it in `cmd/ipfs/ipfs`) without installing it.
**NOTE:** If you get an error along the lines of "fatal error: stdlib.h: No such file or directory", you're missing a C compiler. Either re-run `make` with `CGO_ENABLED=0` or install GCC.
@ -400,7 +400,7 @@ make build GOOS=myTargetOS GOARCH=myTargetArchitecture
- Separate [instructions are available for building on Windows](docs/windows.md).
- `git` is required in order for `go get` to fetch all dependencies.
- Package managers often contain out-of-date `golang` packages.
Ensure that `go version` reports at least 1.10. See above for how to install go.
Ensure that `go version` reports the minimum version required (see go.mod). See above for how to install go.
- If you are interested in development, please install the development
dependencies as well.
- Shell command completions can be generated with one of the `ipfs commands completion` subcommands. Read [docs/command-completion.md](docs/command-completion.md) to learn more.
@ -418,6 +418,8 @@ system, this is done with `ipfs init`. See `ipfs init --help` for information on
the optional arguments it takes. After initialization is complete, you can use
`ipfs mount`, `ipfs add` and any of the other commands to explore!
For detailed configuration options, see [docs/config.md](https://github.com/ipfs/kubo/blob/master/docs/config.md).
### Some things to try
Basic proof of 'ipfs working' locally:
@ -436,6 +438,8 @@ For programmatic interaction with Kubo, see our [list of HTTP/RPC clients](docs/
If you have previously installed IPFS before and you are running into problems getting a newer version to work, try deleting (or backing up somewhere else) your IPFS config directory (~/.ipfs by default) and rerunning `ipfs init`. This will reinitialize the config file to its defaults and clear out the local datastore of any bad entries.
For more information about configuration options, see [docs/config.md](https://github.com/ipfs/kubo/blob/master/docs/config.md).
Please direct general questions and help requests to our [forums](https://discuss.ipfs.tech).
If you believe you've found a bug, check the [issues list](https://github.com/ipfs/kubo/issues) and, if you don't see your problem there, either come talk to us on [Matrix chat](https://docs.ipfs.tech/community/chat/), or file an issue of your own!

View File

@ -506,13 +506,18 @@ func setConfig(r repo.Repo, key string, value interface{}) (*ConfigField, error)
return getConfig(r, key)
}
// parseEditorCommand parses the EDITOR environment variable into command and arguments
func parseEditorCommand(editor string) ([]string, error) {
return shlex.Split(editor, true)
}
func editConfig(filename string) error {
editor := os.Getenv("EDITOR")
if editor == "" {
return errors.New("ENV variable $EDITOR not set")
}
editorAndArgs, err := shlex.Split(editor, true)
editorAndArgs, err := parseEditorCommand(editor)
if err != nil {
return fmt.Errorf("cannot parse $EDITOR value: %s", err)
}

View File

@ -14,3 +14,116 @@ func TestScrubMapInternalDelete(t *testing.T) {
t.Errorf("expecting an empty map, got a non-empty map")
}
}
func TestEditorParsing(t *testing.T) {
testCases := []struct {
name string
input string
expected []string
hasError bool
}{
{
name: "simple editor",
input: "vim",
expected: []string{"vim"},
hasError: false,
},
{
name: "editor with single flag",
input: "emacs -nw",
expected: []string{"emacs", "-nw"},
hasError: false,
},
{
name: "VS Code with wait flag (issue #9375)",
input: "code --wait",
expected: []string{"code", "--wait"},
hasError: false,
},
{
name: "VS Code with full path and wait flag (issue #9375)",
input: "/opt/homebrew/bin/code --wait",
expected: []string{"/opt/homebrew/bin/code", "--wait"},
hasError: false,
},
{
name: "editor with quoted path containing spaces",
input: "\"/Applications/Visual Studio Code.app/Contents/Resources/app/bin/code\" --wait",
expected: []string{"/Applications/Visual Studio Code.app/Contents/Resources/app/bin/code", "--wait"},
hasError: false,
},
{
name: "sublime text with wait flag",
input: "subl -w",
expected: []string{"subl", "-w"},
hasError: false,
},
{
name: "nano editor",
input: "nano",
expected: []string{"nano"},
hasError: false,
},
{
name: "gedit editor",
input: "gedit",
expected: []string{"gedit"},
hasError: false,
},
{
name: "editor with multiple flags",
input: "vim -c 'set number' -c 'set hlsearch'",
expected: []string{"vim", "-c", "set number", "-c", "set hlsearch"},
hasError: false,
},
{
name: "trailing backslash (POSIX edge case)",
input: "editor\\",
expected: nil,
hasError: true,
},
{
name: "double quoted editor name with spaces",
input: "\"code with spaces\" --wait",
expected: []string{"code with spaces", "--wait"},
hasError: false,
},
{
name: "single quoted editor with flags",
input: "'my editor' -flag",
expected: []string{"my editor", "-flag"},
hasError: false,
},
}
for _, tc := range testCases {
t.Run(tc.name, func(t *testing.T) {
result, err := parseEditorCommand(tc.input)
if tc.hasError {
if err == nil {
t.Errorf("Expected error for input '%s', but got none", tc.input)
}
return
}
if err != nil {
t.Errorf("Unexpected error for input '%s': %v", tc.input, err)
return
}
if len(result) != len(tc.expected) {
t.Errorf("Expected %d args, got %d for input '%s'", len(tc.expected), len(result), tc.input)
t.Errorf("Expected: %v", tc.expected)
t.Errorf("Got: %v", result)
return
}
for i, expected := range tc.expected {
if result[i] != expected {
t.Errorf("Expected arg %d to be '%s', got '%s' for input '%s'", i, expected, result[i], tc.input)
}
}
})
}
}

View File

@ -111,6 +111,7 @@ func Bitswap(serverEnabled, libp2pEnabled, httpEnabled bool) interface{} {
httpnet.WithInsecureSkipVerify(httpCfg.TLSInsecureSkipVerify.WithDefault(config.DefaultHTTPRetrievalTLSInsecureSkipVerify)),
httpnet.WithMaxBlockSize(int64(maxBlockSize)),
httpnet.WithUserAgent(version.GetUserAgentVersion()),
httpnet.WithMetricsLabelsForEndpoints(httpCfg.Allowlist),
)
bitswapNetworks = network.New(in.Host.Peerstore(), bitswapLibp2p, bitswapHTTP)
} else if libp2pEnabled {

View File

@ -4,10 +4,12 @@
This release was brought to you by the [Interplanetary Shipyard](https://ipshipyard.com/) team.
- [v0.36.0](#v0340)
- [v0.36.0](#v0360)
## v0.36.0
[<img align="right" width="256px" src="https://github.com/user-attachments/assets/0d830631-7b92-48ca-8ce9-b537e1479dfb" />](https://github.com/user-attachments/assets/0d830631-7b92-48ca-8ce9-b537e1479dfb)
- [Overview](#overview)
- [🔦 Highlights](#-highlights)
- [HTTP Retrieval Client Now Enabled by Default](#http-retrieval-client-now-enabled-by-default)
@ -16,7 +18,8 @@ This release was brought to you by the [Interplanetary Shipyard](https://ipship
- [Kubo now uses AutoNATv2 as a client](#kubo-now-uses-autonatv2-as-a-client)
- [Smarter AutoTLS registration](#smarter-autotls-registration)
- [Overwrite option for files cp command](#overwrite-option-for-files-cp-command)
- [Option for filestore command to remove bad blocks](#option-for-filestore-command-to-remove-bad-blocks)
- [Gateway now supports negative HTTP Range requests](#gateway-now-supports-negative-http-range-requests)
- [Option for `filestore` command to remove bad blocks](#option-for-filestore-command-to-remove-bad-blocks)
- [`ConnMgr.SilencePeriod` configuration setting exposed](#connmgrsilenceperiod-configuration-setting-exposed)
- [Fix handling of EDITOR env var](#fix-handling-of-editor-env-var)
- [📦️ Important dependency updates](#-important-dependency-updates)
@ -29,7 +32,7 @@ This release was brought to you by the [Interplanetary Shipyard](https://ipship
#### HTTP Retrieval Client Now Enabled by Default
This release promotes the HTTP Retrieval client from an experimental feature to a standard feature that is enabled by default. When possible, Kubo will be retrieving blocks over plain HTTPS (HTTP/2) without any extra user configuration.
This release promotes the HTTP Retrieval client from an experimental feature to a standard feature that is enabled by default. When possible, Kubo will retrieve blocks over plain HTTPS (HTTP/2) without any extra user configuration.
See [`HTTPRetrieval`](https://github.com/ipfs/kubo/blob/master/docs/config.md#httpretrieval) for more details.
@ -37,11 +40,11 @@ See [`HTTPRetrieval`](https://github.com/ipfs/kubo/blob/master/docs/config.md#ht
The Bitswap client now supports broadcast reduction logic, which is enabled by default. This feature significantly reduces the number of broadcast messages sent to peers, resulting in lower bandwidth usage during load spikes.
The overall logic works by sending to non-local peers only if those peers have previously replied that they have wanted data blocks. To minimize impact on existing workloads, by default, broadcasts are still always sent to peers on the local network, or the ones defined in `Peering.Peers`.
The overall logic works by sending to non-local peers only if those peers have previously replied that they want data blocks. To minimize impact on existing workloads, by default, broadcasts are still always sent to peers on the local network, or the ones defined in `Peering.Peers`.
At Shipyard, we conducted A/B testing on our internal Kubo staging gateway with organic CID requests to `ipfs.io`. While these results may not exactly match your specific workload, the benefits proved significant enough to make this feature default. Here are the key findings:
- **Dramatic Resource Usage Reduction:** Internal testing demonstrated reduction in Bitswap broadcast messages by 80-98% and network bandwidth savings of 50-95%, with the greatest improvements occurring during high traffic and peer spikes. These efficiency gains lower operational costs of running Kubo under high load and improve the IPFS Mainnet (which is >80% Kubo-based) by reducing ambient traffic for all connected peers.
- **Dramatic Resource Usage Reduction:** Internal testing demonstrated a reduction in Bitswap broadcast messages by 80-98% and network bandwidth savings of 50-95%, with the greatest improvements occurring during high traffic and peer spikes. These efficiency gains lower operational costs of running Kubo under high load and improve the IPFS Mainnet (which is >80% Kubo-based) by reducing ambient traffic for all connected peers.
- **Improved Memory Stability:** Memory stays stable even during major CID request spikes that increase peer count, preventing the out-of-memory (OOM) issues found in earlier Kubo versions.
- **Data Retrieval Performance Remains Strong:** Our tests suggest that Kubo gateway hosts with broadcast reduction enabled achieve similar or better HTTP 200 success rates compared to version 0.35, while maintaining equivalent or higher want-have responses and unique blocks received.
@ -53,7 +56,7 @@ For a description of the configuration items, see the documentation of [`Interna
#### Update go-log to v2
go-log v2 has been out for quite a while now and it is time to deprecate v1.
go-log v2 has been out for quite a while now and it's time to deprecate v1.
- Replace all use of `go-log` with `go-log/v2`
- Makes `/api/v0/log/tail` useful over HTTP
@ -66,15 +69,20 @@ This Kubo release starts utilizing [AutoNATv2](https://github.com/libp2p/specs/b
##### Smarter AutoTLS registration
This update to libp2p and [AutoTLS](https://github.com/ipfs/kubo/blob/master/docs/config.md#autotls) tests AutoNATv2 changes. It aims to reduce false-positive scenarios where AutoTLS certificate registration occurred before a publicly dialable multiaddr was available. This should result in fewer error logs during node start, especially when IPv6 and/or IPv4 NATs with UPnP/PCP/NAT-PMP are at play.
This update to libp2p and [AutoTLS](https://github.com/ipfs/kubo/blob/master/docs/config.md#autotls) incorporates AutoNATv2 changes. It aims to reduce false-positive scenarios where AutoTLS certificate registration occurred before a publicly dialable multiaddr was available. This should result in fewer error logs during node start, especially when IPv6 and/or IPv4 NATs with UPnP/PCP/NAT-PMP are at play.
#### Overwrite option for files cp command
The `ipfs files cp` command has a `--force` option to allow it to overwrite existing files. Attempting to overwrite an existing directory results in an error.
#### Option for filestore command to remove bad blocks
#### Gateway now supports negative HTTP Range requests
The `filestore` command has a new option, `--remove-bad-blocks`, to verify objects in the filestore and remove those that fail verification.
The latest update to `boxo/gateway` adds support for negative HTTP Range requests, achieving [gateway-conformance@v0.8](https://github.com/ipfs/gateway-conformance/releases/tag/v0.8.0) compatibility.
This provides greater interoperability with generic HTTP-based tools. For example, [WebRecorder](https://webrecorder.net/archivewebpage/)'s https://replayweb.page/ can now directly load website snapshots from Kubo-backed URLs.
#### Option for `filestore` command to remove bad blocks
The [experimental `filestore`](https://github.com/ipfs/kubo/blob/master/docs/experimental-features.md#ipfs-filestore) command has a new option, `--remove-bad-blocks`, to verify objects in the filestore and remove those that fail verification.
#### `ConnMgr.SilencePeriod` configuration setting exposed
@ -82,7 +90,7 @@ This connection manager option controls how often connections are swept and pote
#### Fix handling of EDITOR env var
The `ipfs config edit` command did not correctly handle the `EDITOR` environment variable correctly when its value contains flags and arguments, i.e. `EDITOR=emacs -nw`. The command was treating the entire value of `$EDITOR` as the name of the editor command. This has been fixed to parse the value of `$EDITOR` into separate args, respecting shell quoting.
The `ipfs config edit` command did not correctly handle the `EDITOR` environment variable when its value contains flags and arguments, i.e. `EDITOR=emacs -nw`. The command was treating the entire value of `$EDITOR` as the name of the editor command. This has been fixed to parse the value of `$EDITOR` into separate args, respecting shell quoting.
#### 📦️ Important dependency updates
@ -95,4 +103,227 @@ The `ipfs config edit` command did not correctly handle the `EDITOR` environment
### 📝 Changelog
<details><summary>Full Changelog</summary>
- github.com/ipfs/kubo:
- chore: 0.36.0
- chore: update links in markdown
- chore: 0.36.0-rc2
- feat(httpnet): gather metrics for allowlist
- chore: changelog
- test: TestEditorParsing
- fix: handling of EDITOR env var (#10855) ([ipfs/kubo#10855](https://github.com/ipfs/kubo/pull/10855))
- refactor: use slices.Sort where appropriate (#10858) ([ipfs/kubo#10858](https://github.com/ipfs/kubo/pull/10858))
- Upgrade to Boxo v0.33.0 (#10857) ([ipfs/kubo#10857](https://github.com/ipfs/kubo/pull/10857))
- chore: Upgrade github.com/cockroachdb/pebble/v2 to v2.0.6 for Go 1.25 support (#10850) ([ipfs/kubo#10850](https://github.com/ipfs/kubo/pull/10850))
- core:constructor: add a log line about http retrieval
- chore: p2p-forge v0.6.0 + go-libp2p 0.42.0 (#10840) ([ipfs/kubo#10840](https://github.com/ipfs/kubo/pull/10840))
- docs: fix minor typos (#10849) ([ipfs/kubo#10849](https://github.com/ipfs/kubo/pull/10849))
- Replace use of go-car v1 with go-car/v2 (#10845) ([ipfs/kubo#10845](https://github.com/ipfs/kubo/pull/10845))
- chore: v0.36.0-rc1
- chore: deduplicate 0.36 changelog
- feat(config): connmgr: expose silence period (#10827) ([ipfs/kubo#10827](https://github.com/ipfs/kubo/pull/10827))
- bitswap/client: configurable broadcast reduction (#10825) ([ipfs/kubo#10825](https://github.com/ipfs/kubo/pull/10825))
- Upgrade to Boxo v0.32.0 (#10839) ([ipfs/kubo#10839](https://github.com/ipfs/kubo/pull/10839))
- feat: HTTP retrieval enabled by default (#10836) ([ipfs/kubo#10836](https://github.com/ipfs/kubo/pull/10836))
- feat: AutoTLS with AutoNATv2 client (#10835) ([ipfs/kubo#10835](https://github.com/ipfs/kubo/pull/10835))
- commands: add `--force` option to `files cp` command (#10823) ([ipfs/kubo#10823](https://github.com/ipfs/kubo/pull/10823))
- docs/env variables: Document LIBP2P_SWARM_FD_LIMIT ([ipfs/kubo#10828](https://github.com/ipfs/kubo/pull/10828))
- test: fix "invert" commands in sharness tests (#9652) ([ipfs/kubo#9652](https://github.com/ipfs/kubo/pull/9652))
- Ivan386/filestore fix (#7474) ([ipfs/kubo#7474](https://github.com/ipfs/kubo/pull/7474))
- wrap user-facing mfs.Lookup error (#10821) ([ipfs/kubo#10821](https://github.com/ipfs/kubo/pull/10821))
- Update fuse docs with FreeBSD specifics (#10820) ([ipfs/kubo#10820](https://github.com/ipfs/kubo/pull/10820))
- Minor wording fixes in docs (#10822) ([ipfs/kubo#10822](https://github.com/ipfs/kubo/pull/10822))
- fix(gateway): gateway-conformance v0.8 (#10818) ([ipfs/kubo#10818](https://github.com/ipfs/kubo/pull/10818))
- Upgrade to Boxo v0.31.0 (#10819) ([ipfs/kubo#10819](https://github.com/ipfs/kubo/pull/10819))
- Merge release v0.35.0 ([ipfs/kubo#10815](https://github.com/ipfs/kubo/pull/10815))
- fix: go-libp2p-kad-dht v0.33.1 (#10814) ([ipfs/kubo#10814](https://github.com/ipfs/kubo/pull/10814))
- fix: p2p-forge v0.5.1 ignoring /p2p-circuit (#10813) ([ipfs/kubo#10813](https://github.com/ipfs/kubo/pull/10813))
- Upgrade go-libp2p-kad-dht to v0.33.0 (#10811) ([ipfs/kubo#10811](https://github.com/ipfs/kubo/pull/10811))
- chore: use go-log/v2 (#10801) ([ipfs/kubo#10801](https://github.com/ipfs/kubo/pull/10801))
- fix(fuse): ipns error handling and friendly errors (#10807) ([ipfs/kubo#10807](https://github.com/ipfs/kubo/pull/10807))
- fix(config): wire up `Provider.Enabled` flag (#10804) ([ipfs/kubo#10804](https://github.com/ipfs/kubo/pull/10804))
- chore: bump version to 0.36.0-dev
- github.com/ipfs/boxo (v0.30.0 -> v0.33.0):
- Release v0.33.0 ([ipfs/boxo#974](https://github.com/ipfs/boxo/pull/974))
- [skip changelog] fix sending empty want from #968 (#975) ([ipfs/boxo#975](https://github.com/ipfs/boxo/pull/975))
- minor typo fixes (#972) ([ipfs/boxo#972](https://github.com/ipfs/boxo/pull/972))
- fix: normalize delegated /routing/v1 urls (#971) ([ipfs/boxo#971](https://github.com/ipfs/boxo/pull/971))
- bitswap/client: Set DontHaveTimeout MinTimeout to 50ms (#965) ([ipfs/boxo#965](https://github.com/ipfs/boxo/pull/965))
- remove unused code (#967) ([ipfs/boxo#967](https://github.com/ipfs/boxo/pull/967))
- Fix sending extra wants (#968) ([ipfs/boxo#968](https://github.com/ipfs/boxo/pull/968))
- Handle Bitswap messages without `Wantlist` (#961) ([ipfs/boxo#961](https://github.com/ipfs/boxo/pull/961))
- bitswap/httpnet: limit metric cardinality ([ipfs/boxo#957](https://github.com/ipfs/boxo/pull/957))
- bitswap/httpnet: Sanitize allow/denylist inputs ([ipfs/boxo#964](https://github.com/ipfs/boxo/pull/964))
- Bitswap: Set DontHaveTimeout/MinTimeout to 200ms. ([ipfs/boxo#959](https://github.com/ipfs/boxo/pull/959))
- upgrade go-libp2p to v0.42.0 (#960) ([ipfs/boxo#960](https://github.com/ipfs/boxo/pull/960))
- refactor: use the built-in max/min to simplify the code [skip changelog] (#941) ([ipfs/boxo#941](https://github.com/ipfs/boxo/pull/941))
- bitswap/httpnet: adjust error logging (#958) ([ipfs/boxo#958](https://github.com/ipfs/boxo/pull/958))
- docs: reprovider metrics name in changelog (#953) ([ipfs/boxo#953](https://github.com/ipfs/boxo/pull/953))
- Release v0.32.0 (#952) ([ipfs/boxo#952](https://github.com/ipfs/boxo/pull/952))
- Remove redundant loop over published blocks (#950) ([ipfs/boxo#950](https://github.com/ipfs/boxo/pull/950))
- Fix links in README.md (#948) ([ipfs/boxo#948](https://github.com/ipfs/boxo/pull/948))
- chore(provider): meaningful info level log (#940) ([ipfs/boxo#940](https://github.com/ipfs/boxo/pull/940))
- feat(provider): reprovide metrics (#944) ([ipfs/boxo#944](https://github.com/ipfs/boxo/pull/944))
- ci: set up golangci lint in boxo (#943) ([ipfs/boxo#943](https://github.com/ipfs/boxo/pull/943))
- Do not return error from notify blocks when bitswap shutdown (#947) ([ipfs/boxo#947](https://github.com/ipfs/boxo/pull/947))
- bitswap/client: broadcast reduction and metrics (#937) ([ipfs/boxo#937](https://github.com/ipfs/boxo/pull/937))
- fix: typo in HAMT error message ([ipfs/boxo#945](https://github.com/ipfs/boxo/pull/945))
- bitswap/httpnet: expose the errors on connect when connection impossible ([ipfs/boxo#939](https://github.com/ipfs/boxo/pull/939))
- fix(unixfs): int check (#936) ([ipfs/boxo#936](https://github.com/ipfs/boxo/pull/936))
- Remove WithPeerLedger option and PeerLedger interface (#938) ([ipfs/boxo#938](https://github.com/ipfs/boxo/pull/938))
- fix(gateway): support suffix range requests (#922) ([ipfs/boxo#922](https://github.com/ipfs/boxo/pull/922))
- Release v0.31.0 ([ipfs/boxo#934](https://github.com/ipfs/boxo/pull/934))
- Revert "Remove an unused timestamp from traceability.Block" (#931) ([ipfs/boxo#931](https://github.com/ipfs/boxo/pull/931))
- update changelog (#930) ([ipfs/boxo#930](https://github.com/ipfs/boxo/pull/930))
- Deprecate WithPeerLedger option for bitswap server (#929) ([ipfs/boxo#929](https://github.com/ipfs/boxo/pull/929))
- refactor: use a more efficient querying method (#921) ([ipfs/boxo#921](https://github.com/ipfs/boxo/pull/921))
- Use go-car/v2 for reading CAR files in gateway backend (#927) ([ipfs/boxo#927](https://github.com/ipfs/boxo/pull/927))
- Upgrade go-libp2p-kad-dht v0.33.1 (#924) ([ipfs/boxo#924](https://github.com/ipfs/boxo/pull/924))
- bitswap/httpnet: Disconnect peers after client errors ([ipfs/boxo#919](https://github.com/ipfs/boxo/pull/919))
- Remove an unused timestamp from traceability.Block (#923) ([ipfs/boxo#923](https://github.com/ipfs/boxo/pull/923))
- fix(bitswap/httpnet): idempotent Stop() (#920) ([ipfs/boxo#920](https://github.com/ipfs/boxo/pull/920))
- Update dependencies (#916) ([ipfs/boxo#916](https://github.com/ipfs/boxo/pull/916))
- github.com/ipfs/go-block-format (v0.2.1 -> v0.2.2):
- new version (#62) ([ipfs/go-block-format#62](https://github.com/ipfs/go-block-format/pull/62))
- Use value receivers for `BasicBlock` methods (#61) ([ipfs/go-block-format#61](https://github.com/ipfs/go-block-format/pull/61))
- github.com/ipfs/go-ds-badger4 (v0.1.5 -> v0.1.8):
- new version (#7) ([ipfs/go-ds-badger4#7](https://github.com/ipfs/go-ds-badger4/pull/7))
- update version (#5) ([ipfs/go-ds-badger4#5](https://github.com/ipfs/go-ds-badger4/pull/5))
- update dependencies (#4) ([ipfs/go-ds-badger4#4](https://github.com/ipfs/go-ds-badger4/pull/4))
- new version ([ipfs/go-ds-badger4#3](https://github.com/ipfs/go-ds-badger4/pull/3))
- use go-datastore without goprocess ([ipfs/go-ds-badger4#2](https://github.com/ipfs/go-ds-badger4/pull/2))
- github.com/ipfs/go-ds-pebble (v0.5.0 -> v0.5.1):
- new version (#55) ([ipfs/go-ds-pebble#55](https://github.com/ipfs/go-ds-pebble/pull/55))
- github.com/ipfs/go-ipfs-cmds (v0.14.1 -> v0.15.0):
- new version (#287) ([ipfs/go-ipfs-cmds#287](https://github.com/ipfs/go-ipfs-cmds/pull/287))
- minor document updates (#286) ([ipfs/go-ipfs-cmds#286](https://github.com/ipfs/go-ipfs-cmds/pull/286))
- Update go log v2 (#285) ([ipfs/go-ipfs-cmds#285](https://github.com/ipfs/go-ipfs-cmds/pull/285))
- ci: uci/update-go (#281) ([ipfs/go-ipfs-cmds#281](https://github.com/ipfs/go-ipfs-cmds/pull/281))
- github.com/ipfs/go-ipld-format (v0.6.0 -> v0.6.2):
- new version (#96) ([ipfs/go-ipld-format#96](https://github.com/ipfs/go-ipld-format/pull/96))
- bump version (#94) ([ipfs/go-ipld-format#94](https://github.com/ipfs/go-ipld-format/pull/94))
- github.com/ipfs/go-ipld-legacy (v0.2.1 -> v0.2.2):
- new version ([ipfs/go-ipld-legacy#25](https://github.com/ipfs/go-ipld-legacy/pull/25))
- github.com/ipfs/go-test (v0.2.1 -> v0.2.2):
- new version (#25) ([ipfs/go-test#25](https://github.com/ipfs/go-test/pull/25))
- Update README.md (#24) ([ipfs/go-test#24](https://github.com/ipfs/go-test/pull/24))
- github.com/ipfs/go-unixfsnode (v1.10.0 -> v1.10.1):
- new version ([ipfs/go-unixfsnode#84](https://github.com/ipfs/go-unixfsnode/pull/84))
- github.com/ipld/go-car/v2 (v2.14.2 -> v2.14.3):
- bump version ([ipld/go-car#579](https://github.com/ipld/go-car/pull/579))
- chore: update to boxo merkledag package
- feat: car debug handles the zero length block ([ipld/go-car#569](https://github.com/ipld/go-car/pull/569))
- chore(deps): bump github.com/rogpeppe/go-internal from 1.13.1 to 1.14.1 in /cmd ([ipld/go-car#566](https://github.com/ipld/go-car/pull/566))
- Add a concatination cli utility ([ipld/go-car#565](https://github.com/ipld/go-car/pull/565))
- github.com/ipld/go-codec-dagpb (v1.6.0 -> v1.7.0):
- chore: v1.7.0 bump
- github.com/libp2p/go-flow-metrics (v0.2.0 -> v0.3.0):
- chore: release v0.3.0 ([libp2p/go-flow-metrics#38](https://github.com/libp2p/go-flow-metrics/pull/38))
- go-clock migration ([libp2p/go-flow-metrics#36](https://github.com/libp2p/go-flow-metrics/pull/36))
- github.com/libp2p/go-libp2p (v0.41.1 -> v0.42.0):
- Release v0.42.0 (#3318) ([libp2p/go-libp2p#3318](https://github.com/libp2p/go-libp2p/pull/3318))
- mocknet: notify listeners on listen (#3310) ([libp2p/go-libp2p#3310](https://github.com/libp2p/go-libp2p/pull/3310))
- autonatv2: add metrics (#3308) ([libp2p/go-libp2p#3308](https://github.com/libp2p/go-libp2p/pull/3308))
- chore: fix errors reported by golangci-lint ([libp2p/go-libp2p#3295](https://github.com/libp2p/go-libp2p/pull/3295))
- autonatv2: add Unknown addrs to event (#3305) ([libp2p/go-libp2p#3305](https://github.com/libp2p/go-libp2p/pull/3305))
- transport: rate limit new connections (#3283) ([libp2p/go-libp2p#3283](https://github.com/libp2p/go-libp2p/pull/3283))
- basichost: use autonatv2 to verify reachability (#3231) ([libp2p/go-libp2p#3231](https://github.com/libp2p/go-libp2p/pull/3231))
- chore: Revert "go-clock migration" (#3303) ([libp2p/go-libp2p#3303](https://github.com/libp2p/go-libp2p/pull/3303))
- tcp: ensure tcpGatedMaListener wrapping happens always (#3275) ([libp2p/go-libp2p#3275](https://github.com/libp2p/go-libp2p/pull/3275))
- go-clock migration ([libp2p/go-libp2p#3293](https://github.com/libp2p/go-libp2p/pull/3293))
- swarm_test: support more transports for GenSwarm (#3130) ([libp2p/go-libp2p#3130](https://github.com/libp2p/go-libp2p/pull/3130))
- eventbus: change slow consumer event from error to warn (#3286) ([libp2p/go-libp2p#3286](https://github.com/libp2p/go-libp2p/pull/3286))
- quicreuse: add some documentation for the package (#3279) ([libp2p/go-libp2p#3279](https://github.com/libp2p/go-libp2p/pull/3279))
- identify: rate limit id push protocol (#3266) ([libp2p/go-libp2p#3266](https://github.com/libp2p/go-libp2p/pull/3266))
- fix(pstoreds): add missing log for failed GC record unmarshalling in `purgeStore()` (#3273) ([libp2p/go-libp2p#3273](https://github.com/libp2p/go-libp2p/pull/3273))
- nat: improve port mapping failure logging (#3261) ([libp2p/go-libp2p#3261](https://github.com/libp2p/go-libp2p/pull/3261))
- ci: add golangci-lint for linting (#3269) ([libp2p/go-libp2p#3269](https://github.com/libp2p/go-libp2p/pull/3269))
- build(test_analysis): use `modernc.org/sqlite` directly (#3227) ([libp2p/go-libp2p#3227](https://github.com/libp2p/go-libp2p/pull/3227))
- chore(certificate): update test vectors (#3242) ([libp2p/go-libp2p#3242](https://github.com/libp2p/go-libp2p/pull/3242))
- rcmgr: use netip.Prefix as map key instead of string (#3264) ([libp2p/go-libp2p#3264](https://github.com/libp2p/go-libp2p/pull/3264))
- webrtc: support receiving 256kB messages (#3255) ([libp2p/go-libp2p#3255](https://github.com/libp2p/go-libp2p/pull/3255))
- peerstore: remove leveldb tests (#3260) ([libp2p/go-libp2p#3260](https://github.com/libp2p/go-libp2p/pull/3260))
- identify: reduce timeout to 5 seconds (#3259) ([libp2p/go-libp2p#3259](https://github.com/libp2p/go-libp2p/pull/3259))
- fix(relay): fix data-race in relayFinder (#3258) ([libp2p/go-libp2p#3258](https://github.com/libp2p/go-libp2p/pull/3258))
- chore: update p2p-forge to v0.5.0 for autotls example (#3257) ([libp2p/go-libp2p#3257](https://github.com/libp2p/go-libp2p/pull/3257))
- peerstore: remove unused badger tests (#3252) ([libp2p/go-libp2p#3252](https://github.com/libp2p/go-libp2p/pull/3252))
- chore: using t.TempDir() instead of os.MkdirTemp (#3222) ([libp2p/go-libp2p#3222](https://github.com/libp2p/go-libp2p/pull/3222))
- chore(examples): p2p-forge/client v0.4.0 (#3211) ([libp2p/go-libp2p#3211](https://github.com/libp2p/go-libp2p/pull/3211))
- transport: add GatedMaListener type (#3186) ([libp2p/go-libp2p#3186](https://github.com/libp2p/go-libp2p/pull/3186))
- autonatv2: explicitly handle dns addrs (#3249) ([libp2p/go-libp2p#3249](https://github.com/libp2p/go-libp2p/pull/3249))
- autonatv2: fix server dial data request policy (#3247) ([libp2p/go-libp2p#3247](https://github.com/libp2p/go-libp2p/pull/3247))
- webtransport: wrap underlying transport error on stream resets (#3237) ([libp2p/go-libp2p#3237](https://github.com/libp2p/go-libp2p/pull/3237))
- connmgr: remove WithEmergencyTrim (#3217) ([libp2p/go-libp2p#3217](https://github.com/libp2p/go-libp2p/pull/3217))
- connmgr: fix transport association bug (#3221) ([libp2p/go-libp2p#3221](https://github.com/libp2p/go-libp2p/pull/3221))
- webrtc: fix memory leak with udpmux.muxedConnection context (#3243) ([libp2p/go-libp2p#3243](https://github.com/libp2p/go-libp2p/pull/3243))
- fix(libp2phttp): bound NewStream timeout (#3225) ([libp2p/go-libp2p#3225](https://github.com/libp2p/go-libp2p/pull/3225))
- conngater: fix incorrect err return value (#3219) ([libp2p/go-libp2p#3219](https://github.com/libp2p/go-libp2p/pull/3219))
- addrsmanager: extract out addressing logic from basichost (#3075) ([libp2p/go-libp2p#3075](https://github.com/libp2p/go-libp2p/pull/3075))
- github.com/libp2p/go-socket-activation (v0.1.0 -> v0.1.1):
- new version (#35) ([libp2p/go-socket-activation#35](https://github.com/libp2p/go-socket-activation/pull/35))
- Upgrade to go-log/v2 v2.6.0 (#33) ([libp2p/go-socket-activation#33](https://github.com/libp2p/go-socket-activation/pull/33))
- sync: update CI config files (#20) ([libp2p/go-socket-activation#20](https://github.com/libp2p/go-socket-activation/pull/20))
- sync: update CI config files (#18) ([libp2p/go-socket-activation#18](https://github.com/libp2p/go-socket-activation/pull/18))
- sync: update CI config files (#17) ([libp2p/go-socket-activation#17](https://github.com/libp2p/go-socket-activation/pull/17))
- github.com/libp2p/go-yamux/v5 (v5.0.0 -> v5.0.1):
- Release v5.0.1
- fix: deadlock on close (#130) ([libp2p/go-yamux#130](https://github.com/libp2p/go-yamux/pull/130))
- github.com/multiformats/go-multiaddr (v0.15.0 -> v0.16.0):
- Release v0.16.0 (#279) ([multiformats/go-multiaddr#279](https://github.com/multiformats/go-multiaddr/pull/279))
- Rename CaptureStringVal to CaptureString (#278) ([multiformats/go-multiaddr#278](https://github.com/multiformats/go-multiaddr/pull/278))
- Megular Expressions (#263) ([multiformats/go-multiaddr#263](https://github.com/multiformats/go-multiaddr/pull/263))
- github.com/multiformats/go-multicodec (v0.9.0 -> v0.9.2):
- v0.9.2 bump
- chore: update submodules and go generate
- chore: v0.9.1 bump
- chore: update submodules and go generate
- ci: uci/update-go (#97) ([multiformats/go-multicodec#97](https://github.com/multiformats/go-multicodec/pull/97))
- chore: update submodules and go generate
- chore: update submodules and go generate
- chore: update submodules and go generate
- chore: update submodules and go generate
- github.com/multiformats/go-multistream (v0.6.0 -> v0.6.1):
- Release v0.6.1 ([multiformats/go-multistream#121](https://github.com/multiformats/go-multistream/pull/121))
- refactor(lazyClientConn): Use synctest friendly once func ([multiformats/go-multistream#120](https://github.com/multiformats/go-multistream/pull/120))
</details>
### 👨‍👩‍👧‍👦 Contributors
| Contributor | Commits | Lines ± | Files Changed |
|-------------|---------|---------|---------------|
| sukun | 25 | +7274/-1586 | 140 |
| galargh | 13 | +1714/-1680 | 115 |
| rvagg | 2 | +1383/-960 | 6 |
| Andrew Gillis | 46 | +1226/-564 | 140 |
| Marco Munizaga | 6 | +1643/-36 | 24 |
| Hector Sanjuan | 20 | +624/-202 | 40 |
| Marcin Rataj | 24 | +583/-175 | 49 |
| Dennis Trautwein | 1 | +134/-14 | 4 |
| Piotr Galar | 1 | +73/-71 | 23 |
| Guillaume Michel | 4 | +58/-44 | 23 |
| Ivan | 1 | +90/-9 | 3 |
| Will Scott | 1 | +97/-0 | 2 |
| gammazero | 11 | +47/-30 | 13 |
| guillaumemichel | 3 | +40/-35 | 21 |
| Adin Schmahmann | 1 | +58/-17 | 8 |
| Laurent Senta | 1 | +26/-24 | 4 |
| pullmerge | 1 | +20/-16 | 5 |
| vladopajic | 1 | +20/-14 | 1 |
| Probot | 1 | +18/-4 | 1 |
| Dmitry Markin | 1 | +13/-9 | 2 |
| overallteach | 1 | +4/-12 | 3 |
| web3-bot | 5 | +9/-6 | 7 |
| Pavel Zbitskiy | 1 | +14/-1 | 1 |
| Rod Vagg | 5 | +7/-7 | 5 |
| argentpapa | 1 | +3/-10 | 1 |
| GarmashAlex | 1 | +8/-3 | 1 |
| huochexizhan | 1 | +3/-3 | 1 |
| VolodymyrBg | 1 | +2/-3 | 1 |
| levisyin | 1 | +2/-2 | 2 |
| b00f | 1 | +3/-0 | 1 |
| achingbrain | 1 | +1/-1 | 1 |
| Ocenka | 1 | +1/-1 | 1 |
| Dreamacro | 1 | +1/-1 | 1 |
| Štefan Baebler | 1 | +1/-0 | 1 |

25
docs/changelogs/v0.37.md Normal file
View File

@ -0,0 +1,25 @@
# Kubo changelog v0.37
<a href="https://ipshipyard.com/"><img align="right" src="https://github.com/user-attachments/assets/39ed3504-bb71-47f6-9bf8-cb9a1698f272" /></a>
This release was brought to you by the [Interplanetary Shipyard](https://ipshipyard.com/) team.
- [v0.37.0](#v0370)
## v0.37.0
- [Overview](#overview)
- [🔦 Highlights](#-highlights)
- [📦️ Important dependency updates](#-important-dependency-updates)
- [📝 Changelog](#-changelog)
- [👨‍👩‍👧‍👦 Contributors](#-contributors)
### Overview
### 🔦 Highlights
#### 📦️ Important dependency updates
### 📝 Changelog
### 👨‍👩‍👧‍👦 Contributors

View File

@ -1,6 +1,6 @@
# The Kubo config file
The Kubo (go-ipfs) config file is a JSON document located at `$IPFS_PATH/config`. It
The Kubo config file is a JSON document located at `$IPFS_PATH/config`. It
is read once at node instantiation, either for an offline command, or when
starting the daemon. Commands that execute on a running daemon do not read the
config file at runtime.