Skip to content

Conversation

@lidel
Copy link
Member

@lidel lidel commented Aug 21, 2025

lidel and others added 30 commits June 18, 2025 19:15
* Replace use of go-car v1 with go-car/v2

The `dag export` commend needed to be updated to use go-car/v2. This removes the last dependency on go-car v1.
* update go-libp2p to v0.42

* chore: p2p-forge v0.6.0 + final go-libp2p 0.42.0

* docs: changelog

---------

Co-authored-by: Marcin Rataj <[email protected]>
Similar to broadcast control. Useful for debugging/info purposes.
…uctor

core:constructor: add a log line about http retrieval
… support (#10850)

* Upgrade github.com/cockroachdb/swiss for Go 1.25 support

Go 1.25 incompatibility detected in
* Homebrew/homebrew-core#226636

then:
* reported upstream in cockroachdb/swiss#48
* fixed upstream cockroachdb/swiss#49

This PR brings this fix upstream to kubo.

The fix was brought to github.com/cockroachdb/pebble/v2 in
* cockroachdb/pebble#4954

And released in https://github.com/cockroachdb/pebble/releases/tag/v2.0.6
Which is now used.

Full changelog: cockroachdb/pebble@v2.0.3...v2.0.6

* Upgrade to go-ds-pebble v0.5.1 for pebbel v2.0.6 support

---------

Co-authored-by: gammazero <[email protected]>
* Upgrade to Boxo v0.33.0
* Update test to work with boxo-v0.33.0
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.

Closes #9375
this adds Security section in effort to clarify how each port should
be evaluated from the security perspective
* Update dependencies
* provider: clear reprovide queue when reprovide strategy changes

When the currently configured reprovide strategy does not match the previous strategy read from the datastore, then clear the reprovide queue and update the reprovide strategy that is stored in the datastore.

Depends on ipfs/boxo#978

Closes #10829

* Update docs/changelogs/v0.36.md

Co-authored-by: Guillaume Michel <[email protected]>

* update log message
* update boxo
* Move change log to v0.37.md
* Add `provide clear` command to clear provide queue

The `provide clear` command clears all items from the provide queue and prints out the number of items removed from the queue. The `quiet` option tells the command not to print output.

* refactor(cmds): ipfs provide clear

moving to new namespace to avoid conflicts, and also document other
commands

* docs: clarify Reprovider.Strategy
* chore: remove undesired md link
* remove unneeded thirdparty packages

Remove unnecessary packages from `thirdparty` in repo.

- Remove `thirdparty/assert` (replaced by `github.com/stretchr/testify/require`)
- Remove `thirdparty/dir` (replacd by `misc/fsutil`)
- Remove `thirdparty/notifier` (unused)
* Upgrade to Boxo v0.33.1
After boxo v0.33.1, this is a recommended step to fix http retrieval bugs.

Having a single ConnectEventManager prevents misdirected operations in the
network.Router to change the Connectedness state in a way that the counterpart
(httpnet or bsnet) can later correct.
* chore: update go-libp2p and p2p-forge

* docs: changelog

---------

Co-authored-by: Marcin Rataj <[email protected]>
No behaviour changes.

Currently we are using ProvideManyRouter for Bitswap, which is only meant to
use ContentDiscovery. This makes things more clear in that there is a
designated ContentDiscovery instance.
core: Add a ContentDiscovery field
this ensures user is not expecting improved performance from the start
and also they know when they run accelerated client, which is pretty
expensive
* refactor: remove goprocess

The `goprocess` package is no longer needed. It can be replaces by modern `context` and `context.AfterFunc`.

* mod tidy

* log unmount errors on shutdown

* Do not log non-mounted errors on shutdown

* Use WaitGroup associated with IPFS node to wait for services to whutdown

* Prefer explicit Close to context.ArterFunc

* Do not use node-level WaitGroup

* Unmount for non-supported platforms

* fix return values

* test: daemon shuts down gracefully

make sure ongoing operations dont block shutdown

* test(cli): add TestFUSE

* test: smarter RequiresFUSE

opportunistically run FUSE tests if env has fusermount
and TEST_FUSE was not explicitly set

* docs: changelog

---------

Co-authored-by: gammazero <[email protected]>
Co-authored-by: Marcin Rataj <[email protected]>
* feat(add): add support for naming pinned CID

Signed-off-by: kapil <[email protected]>

* fix(add): no double pinning and simplify pin-name

- modify PinRoot to accept name parameter, eliminating double pinning
- remove automatic filename fallback logic for cleaner behavior
- only create named pins when explicitly requested via --pin-name=value
- replace NoPinName constant with idiomatic empty string literals
- Update help text and tests to reflect explicit-only behavior

* docs: changelog

* chore: lint

* test: negative case for empty pin-name

* chore: gofmt

---------

Signed-off-by: kapil <[email protected]>
Co-authored-by: Marcin Rataj <[email protected]>
Bitswap: use a single ConnectEventManager.
gammazero and others added 12 commits August 15, 2025 14:43
* Use ValidatingBlockstore when HashOnRead is configured
* fix ValidatingBlockstore creation
* upgrade to boxo v0.34.0
* Use tagged boxo release
* Initial pass at Telemetry plugin

Currently, IP Shipyard, with the help of Probelab, monitor and extract
Amino/IPFS public network metrics with the use of DHT crawlers and
bootstrappers (via peerlog plugin). For example, we log all peer IDs seen and
their AgentVersion/Addresses obtained from the `identify` protocol, which
provides insights into protocol usage, total number of peers etc.

We would like to increase the ability to obtain more insights from the network
by collecting some more information in the future, but also to give users more
control over this collection (i.e. opt-out). The information collected will
not allow unique identification of anyone and is only used for aggregation.

Now, this PR explores a way of moving in this direction:

* A new "telemetry" fx plugin is in charge of dealing with telemetry
* The FX plugin allows to plug and make decisions / take actions during the setup phase:
  * We can inspect whether we are using Private Networks before the libp2p.Host has been initialized.
  * We can send telemetry after the libp2p Host is initialized.
  * Everything is self-contained. Custom builds can remove the plugin altogether without needing to surgically edit the code.

As for behaviour:

* The user can opt-in/out via EnvVar, file in the repo path or plugin configuration.
* Users on private networks or with custom bootstrappers are detected, offered a wall of text explaining why we need telemetry and invited to opt-in. Opt-out happens otherwise on a timeout (with no input). Their preferences are stored.
* Users on standard settings are opted-in by default. This is the status quo in Kubo already, except they don't get a chance to opt out.

The telemetry libp2p protocol is yet to be defined, but expect something similar to identify, with a protobuf being pushed to bootstrappers or to a specific telemetry node that we define. In the case of pnets, this will be done with a temporary peer.

* checkpoint

* telemetry plugin: second pass

* On first run it generates a UUID and shows a message to the user.
* UUID is persistend to "telemetry_uuid"
* Sends telemetry 1 minute after boot and every 24h
* LogEvent is the thing containing all the telemetry that is sent
* Opt-out possible via env-var or plugin configuration

* Telemetry: add changelog and environment variable documentation

* docs: improved daemon message

making it more obvious nothing was sent yet
and that user had 15m to out-out

plus some debug logs that confirm opt-out

* refactor: rename IPFS_TELEMETRY_MODE to IPFS_TELEMETRY

* fix: add User-Agent header to telemetry requests

---------

Co-authored-by: Andrew Gillis <[email protected]>
Co-authored-by: Marcin Rataj <[email protected]>
test was expecting immediate GC lock acquisition after pipe close,
but timing wasn't guaranteed. replaced blocking wait with 5-second
timeout to handle timing variations while still detecting deadlocks.
* chore: disable AutoTLS in TCP-only transport tests

Tests were failing intermittently. Disabling AutoTLS when WebSocket
transport is disabled appears to resolve the issue.

* fix: make NewRandPort thread-safe

Track allocated ports globally to prevent conflicts
when tests run in parallel.
* feat(docker): optimize Dockerfile for faster builds

- add BuildKit syntax directive for advanced caching features
- implement cache mounts for Go modules and build cache
- reduce layers by combining RUN commands (5→2 in final stage)
- optimize apt-get with --no-install-recommends flag
- use COPY --chmod to avoid separate permission fixing

Performance improvements:
- incremental builds after code changes: ~8.6x faster (1m51s → 13s)
- go module/build cache persists between builds
- reduced layer count improves cache efficiency

* ci: optimize Docker builds with BuildKit caching

- enable BuildKit with GitHub Actions cache backend
- add Docker Hub registry cache for cross-workflow sharing
- move Docker login earlier to enable registry cache writes
- use dual cache strategy (gha + registry) for faster builds

expected improvements:
- PR builds can reuse main branch cache from Docker Hub
- rebuild after code changes ~5-10x faster with persistent cache
- cross-PR cache sharing reduces redundant builds
* fix(cmds): improve ipfs add --help clarity and organization

- clarify --raw-leaves behavior with CIDv0/v1 defaults
- add Import.* config references to all relevant options
- replace deprecated 'ipfs object links' with 'ipfs ls' in examples
- add section headers for better navigation (BASIC EXAMPLES, MFS INTEGRATION, etc.)
- group related options logically (output control, CID & hashing, experimental features)
- standardize experimental warnings format
- add MerkleDAG docs link and clarify chunking behavior
- fix incorrect Import.UnixFSHAMTThreshold reference

addresses confusion from #10918 where --raw-leaves appeared to have no effect
because CIDv1 automatically enables it by default

* docs: fix typos in Import.* configuration documentation

- fix 'chilcren' → 'children'
- fix 'HAMT directory have' → 'HAMT directories have'
- fix 'A HAMT is an structure' → 'A HAMT is a structure'

* Update core/commands/add.go

Co-authored-by: Daniel Norman <[email protected]>

---------

Co-authored-by: Daniel Norman <[email protected]>
* Reprovider strategy: rename "flat" to "all".

Value "flat" now parses to "all". Behaviour from "all" removed.

Fixes #10864 which has detailed explanation.

* core/node/provider.go: remove unused function mfsRootProvider

It was used in the "all" strategy.

* docs: improve reprovider.strategy=all changelog framing

- highlight memory efficiency improvements
- clarify this removes v0.28 workaround
- update config.md memory requirements
- fix announce-on profile typo

* feat: deprecate Reprovider.Strategy=flat

- add deprecation warning in daemon.go when flat strategy is detected
- document that flat is deprecated in ParseReproviderStrategy comment
- add explicit test case for flat -> all mapping
- flat continues to work but users are warned to migrate to all

---------

Co-authored-by: Marcin Rataj <[email protected]>
@lidel lidel added the skip/changelog This change does NOT require a changelog entry label Aug 21, 2025
gammazero and others added 3 commits August 27, 2025 16:26
* fix: harness tests random panic

Connecting nodes in parallel can cause TLS handshake failures. For each node, connect to the other nodes serially. It is not necessary to connect in parallel as it does not save any significant time.

Closes #10932

(cherry picked from commit ae068a8)
* Tests: disable telemetry in tests by default

Disable the plugin in cli tests and sharness by default. Enable only in
telemetry tests.

There are cases when tests get stuck or get killed and leave daemons hanging around. We don't want to be getting telemetry from those.

* sharness: attempt to fix

* sharness: add missing --bool flag

* fix(ci): add omitempty to Plugin.Config field

The sharness problem is that when the telemetry plugin is configured
initially with 'ipfs config --bool', it creates a structure without
the 'Config: null' field, but when the config is copied and replaced,
it expects the structure to be preserved.

Adding omitempty ensures the Config field is omitted from JSON when
nil, making the config structure consistent between initial creation
and replacement operations.

---------

Co-authored-by: Marcin Rataj <[email protected]>
(cherry picked from commit 15f723a)
* feat(ci): docker linting

adds hadolint to validate dockerfile best practices
configures project-specific rules in .hadolint.yaml

* fix(ci): enable hadolint console output

adds verbose and tty format to see linting results in CI logs

* test: trigger hadolint warning

remove --no-install-recommends to test CI output

* fix(ci): fail hadolint on warnings

stricter linting to catch all best practice violations

* fix: add --no-install-recommends to apt-get

reduces image size by avoiding unnecessary packages

* refactor: use WORKDIR instead of cd in dockerfile

replaces cd commands with WORKDIR for cleaner dockerfile
removes unnecessary hadolint ignore rules DL3003 and DL3009

* chore: simplify hadolint config

removes unnecessary override rules for cleaner config

(cherry picked from commit 82fef0c)
@lidel lidel mentioned this pull request Aug 27, 2025
51 tasks
lidel added 7 commits August 27, 2025 18:58
- updated changelog and contributors with mkreleaselog output
- improved mkreleaselog to work with kubo from any directory
- add emojis to all headers
- add overview section
- group IPNS features together
- fix IPNS flags to match actual implementation
- explain how 'auto' resolution depends on Routing.Type
- add command to inspect effective publishers
- simplify publishing behavior explanation
@lidel lidel marked this pull request as ready for review August 27, 2025 18:58
@lidel lidel requested a review from a team as a code owner August 27, 2025 18:58
@lidel lidel merged commit 6898472 into release Aug 27, 2025
15 checks passed
@lidel lidel deleted the release-v0.37.0 branch August 27, 2025 19:01
@lidel lidel restored the release-v0.37.0 branch August 27, 2025 19:02
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

skip/changelog This change does NOT require a changelog entry

Projects

None yet

Development

Successfully merging this pull request may close these issues.