Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Release 0.33.0 #10636

Draft
wants to merge 54 commits into
base: release
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
54 commits
Select commit Hold shift + click to select a range
c5586d5
chore: bump master to 0.33.0-dev
lidel Oct 30, 2024
1ca0ae0
fix(autotls): store certificates at the location from the repo path (…
aschmahmann Oct 30, 2024
d4ae7fa
chore: update deps (#10569)
aschmahmann Nov 4, 2024
14ec550
chore(github): update bug-report.yml
lidel Nov 4, 2024
e17dc21
chore: [email protected] (#10571)
lidel Nov 5, 2024
4009ad3
chore: stop using go-homedir (#10568)
gammazero Nov 5, 2024
1512ec5
chore: boxo v0.24.3 and p2p-forge v0.0.2 (#10572)
lidel Nov 7, 2024
5d2f536
feat: ipfs-webui v4.4.0 (#10574)
lidel Nov 7, 2024
71048b7
chore(ci): adjust timeout in docker job
lidel Nov 7, 2024
e80e821
fix: go-libp2p-kad-dht v0.28.0 (#10578)
lidel Nov 13, 2024
9b3b191
Merge branch 'master' into merge-release-v0.32.0
lidel Nov 14, 2024
7ca1063
chore: changelog for 0.33
lidel Nov 14, 2024
8351cf9
Merge pull request #10579 from ipfs/merge-release-v0.32.0
lidel Nov 14, 2024
720663d
docs: update RELEASE_CHECKLIST.md (#10564)
lidel Nov 14, 2024
83b06f1
fix: go-libp2p-kad-dht v0.28.1 (#10581)
lidel Nov 15, 2024
c292203
fix(ci): timeout and retry docker smoke test
lidel Nov 15, 2024
d924428
Merge branch 'master' into merge-release-v0.32.1
lidel Nov 15, 2024
f5b8555
Merge pull request #10585 from ipfs/merge-release-v0.32.1
lidel Nov 15, 2024
3a1b8ee
refactor: update to boxo without goprocess (#10567)
gammazero Nov 19, 2024
d506003
Typos Update config.md (#10591)
0xbryer Nov 19, 2024
d1f6541
fix: increase provider sample size (#10589)
lidel Nov 25, 2024
0bd0edc
feat(bootstrap): add JS-based va1.bootstrap.libp2p.io (#10575)
lidel Nov 25, 2024
ef58568
fix some typos in docs (#10598)
gammazero Nov 25, 2024
37c5060
Update to boxo with refactored providerQueryManager. (#10595)
hsanjuan Nov 26, 2024
fb58b0a
tests/cli: fix flapping tests (#10600)
hsanjuan Nov 26, 2024
466f72f
docs: typos (#10602)
hsanjuan Nov 26, 2024
23ef1d7
fix: go-libp2p v0.37.2 (#10603)
lidel Nov 26, 2024
3b2c269
chore: p2p-forge/client v0.1.0 (#10605)
lidel Nov 27, 2024
02995d5
tests(cli/harness): use unused Verbose flag to pipe daemon outputs (#…
hsanjuan Nov 27, 2024
9433105
docs(changelog/v0.33): bitswap reprovide changes (#10604)
hsanjuan Nov 27, 2024
fa769f7
chore(deps): bump codecov/codecov-action from 4.6.0 to 5.0.7 (#10597)
dependabot[bot] Nov 27, 2024
778a418
refactor(rcmgr): use default libp2p rcmgr metrics (#9947)
marten-seemann Nov 27, 2024
8654538
chore: fix broken url in comment (#10606)
hishope Nov 29, 2024
53e793a
fix: ipfs-webui v4.4.1 (#10608)
lidel Dec 3, 2024
224d6a3
refactor(cmds): do not return errors embedded in result type (#10527)
gammazero Dec 3, 2024
433444b
fix(cmds/add): disallow --wrap with --to-files (#10612)
hsanjuan Dec 3, 2024
19dc712
chore: boxo v0.25.0 (#10619)
gammazero Dec 9, 2024
642e58e
chore: use errors.New to replace fmt.Errorf with no parameters (#10617)
ChengenH Dec 10, 2024
c797fbc
chore(deps): bump codecov/codecov-action from 5.0.7 to 5.1.1 (#10620)
dependabot[bot] Dec 13, 2024
53af049
deps: update nopfs
hsanjuan Dec 13, 2024
b42eb5a
Update deps (#10624)
gammazero Dec 13, 2024
09d5789
mod tidy examples
gammazero Dec 13, 2024
335a278
Merge branch 'master' into update-nopfs
gammazero Dec 13, 2024
07b8742
Merge pull request #10625 from ipfs/update-nopfs
hsanjuan Dec 13, 2024
898f024
[skip changelog] pinmfs: mitigate slow mfs writes when it triggers (#…
hsanjuan Dec 17, 2024
7c49860
Upgrade to Boxo v0.26.0 (#10631)
gammazero Dec 19, 2024
ecb2558
cmd/files: flush parent folders (#10630)
hsanjuan Dec 19, 2024
519ae27
feat: expose BlockKeyCacheSize and enable WriteThrough datastore opti…
hsanjuan Dec 19, 2024
295fd96
docs: clarify Swarm.ResourceMgr.MaxMemory (#10622)
lidel Dec 19, 2024
4e91ea3
Minor spelling and wording changes (#10634)
gammazero Dec 20, 2024
f2c1905
feat(flatfs): default to sync=false (#10632)
lidel Dec 20, 2024
397c346
feat(libp2p): shared TCP listeners and AutoTLS.AutoWSS (#10565)
aschmahmann Dec 20, 2024
9282f08
fix: ipfs-webui v4.4.2 (#10635)
lidel Dec 20, 2024
1b5aa0b
chore: 0.33.0-rc1
lidel Dec 20, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .github/ISSUE_TEMPLATE/bug-report.yml
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,9 @@ body:
label: Installation method
description: Please select your installation method
options:
- dist.ipfs.tech or ipfs-update
- docker image
- ipfs-desktop
- ipfs-update or dist.ipfs.tech
- third-party binary
- built from source
- type: textarea
Expand Down
16 changes: 12 additions & 4 deletions .github/workflows/docker-image.yml
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ jobs:
if: github.repository == 'ipfs/kubo' || github.event_name == 'workflow_dispatch'
name: Push Docker image to Docker Hub
runs-on: ubuntu-latest
timeout-minutes: 90
timeout-minutes: 15
env:
IMAGE_NAME: ipfs/kubo
LEGACY_IMAGE_NAME: ipfs/go-ipfs
Expand Down Expand Up @@ -110,9 +110,17 @@ jobs:

# We test all the images on amd64 host here. This uses QEMU to emulate
# the other platforms.
- run: docker run --rm $IMAGE_NAME:linux-amd64 --version
- run: docker run --rm $IMAGE_NAME:linux-arm-v7 --version
- run: docker run --rm $IMAGE_NAME:linux-arm64-v8 --version
# NOTE: --version should finish instantly, but sometimes
# it hangs on github CI (could be qemu issue), so we retry to remove false negatives
- name: Smoke-test linux-amd64
run: for i in {1..3}; do timeout 15s docker run --rm $IMAGE_NAME:linux-amd64 version --all && break || [ $i = 3 ] && exit 1; done
timeout-minutes: 1
- name: Smoke-test linux-arm-v7
run: for i in {1..3}; do timeout 15s docker run --rm $IMAGE_NAME:linux-arm-v7 version --all && break || [ $i = 3 ] && exit 1; done
timeout-minutes: 1
- name: Smoke-test linux-arm64-v8
run: for i in {1..3}; do timeout 15s docker run --rm $IMAGE_NAME:linux-arm64-v8 version --all && break || [ $i = 3 ] && exit 1; done
timeout-minutes: 1

# This will only push the previously built images.
- if: github.event_name != 'workflow_dispatch' || github.event.inputs.push == 'true'
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/gotest.yml
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ jobs:
make -j "$PARALLEL" test/unit/gotest.junit.xml &&
[[ ! $(jq -s -c 'map(select(.Action == "fail")) | .[]' test/unit/gotest.json) ]]
- name: Upload coverage to Codecov
uses: codecov/codecov-action@b9fd7d16f6d7d1b5d2bec1a2887e65ceed900238 # v4.6.0
uses: codecov/codecov-action@7f8b4b4bde536c465e797be725718b88c5d95e0e # v5.1.1
if: failure() || success()
with:
name: unittests
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/sharness.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ jobs:
sharness-test:
if: github.repository == 'ipfs/kubo' || github.event_name == 'workflow_dispatch'
runs-on: ${{ fromJSON(github.repository == 'ipfs/kubo' && '["self-hosted", "linux", "x64", "4xlarge"]' || '"ubuntu-latest"') }}
timeout-minutes: 20
timeout-minutes: ${{ github.repository == 'ipfs/kubo' && 15 || 60 }}
defaults:
run:
shell: bash
Expand Down Expand Up @@ -55,7 +55,7 @@ jobs:
# increasing parallelism beyond 10 doesn't speed up the tests much
PARALLEL: ${{ github.repository == 'ipfs/kubo' && 10 || 3 }}
- name: Upload coverage report
uses: codecov/codecov-action@b9fd7d16f6d7d1b5d2bec1a2887e65ceed900238 # v4.6.0
uses: codecov/codecov-action@7f8b4b4bde536c465e797be725718b88c5d95e0e # v5.1.1
if: failure() || success()
with:
name: sharness
Expand Down
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
# Kubo Changelogs

- [v0.33](docs/changelogs/v0.33.md)
- [v0.32](docs/changelogs/v0.32.md)
- [v0.31](docs/changelogs/v0.31.md)
- [v0.30](docs/changelogs/v0.30.md)
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -254,7 +254,7 @@ You can also install it through the Solus software center.

#### Guix

[Community Package for go-ipfs](https://packages.guix.gnu.org/packages/go-ipfs/0.11.0/) is no out-of-date.
[Community Package for go-ipfs](https://packages.guix.gnu.org/packages/go-ipfs/0.11.0/) is now out-of-date.

#### Snap

Expand Down
64 changes: 25 additions & 39 deletions client/rpc/pin.go
Original file line number Diff line number Diff line change
Expand Up @@ -62,59 +62,45 @@ type pinLsObject struct {
Type string
}

func (api *PinAPI) Ls(ctx context.Context, opts ...caopts.PinLsOption) (<-chan iface.Pin, error) {
func (api *PinAPI) Ls(ctx context.Context, pins chan<- iface.Pin, opts ...caopts.PinLsOption) error {
defer close(pins)

options, err := caopts.PinLsOptions(opts...)
if err != nil {
return nil, err
return err
}

res, err := api.core().Request("pin/ls").
Option("type", options.Type).
Option("stream", true).
Send(ctx)
if err != nil {
return nil, err
return err
}

pins := make(chan iface.Pin)
go func(ch chan<- iface.Pin) {
defer res.Output.Close()
defer close(ch)

dec := json.NewDecoder(res.Output)
var out pinLsObject
for {
switch err := dec.Decode(&out); err {
case nil:
case io.EOF:
return
default:
select {
case ch <- pin{err: err}:
return
case <-ctx.Done():
return
}
defer res.Output.Close()

dec := json.NewDecoder(res.Output)
var out pinLsObject
for {
err := dec.Decode(&out)
if err != nil {
if err != io.EOF {
return err
}
return nil
}

c, err := cid.Parse(out.Cid)
if err != nil {
select {
case ch <- pin{err: err}:
return
case <-ctx.Done():
return
}
}
c, err := cid.Parse(out.Cid)
if err != nil {
return err
}

select {
case ch <- pin{typ: out.Type, name: out.Name, path: path.FromCid(c)}:
case <-ctx.Done():
return
}
select {
case pins <- pin{typ: out.Type, name: out.Name, path: path.FromCid(c)}:
case <-ctx.Done():
return ctx.Err()
}
}(pins)
return pins, nil
}
}

// IsPinned returns whether or not the given cid is pinned
Expand Down
116 changes: 48 additions & 68 deletions client/rpc/unixfs.go
Original file line number Diff line number Diff line change
Expand Up @@ -144,10 +144,12 @@ type lsOutput struct {
Objects []lsObject
}

func (api *UnixfsAPI) Ls(ctx context.Context, p path.Path, opts ...caopts.UnixfsLsOption) (<-chan iface.DirEntry, error) {
func (api *UnixfsAPI) Ls(ctx context.Context, p path.Path, out chan<- iface.DirEntry, opts ...caopts.UnixfsLsOption) error {
defer close(out)

options, err := caopts.UnixfsLsOptions(opts...)
if err != nil {
return nil, err
return err
}

resp, err := api.core().Request("ls", p.String()).
Expand All @@ -156,86 +158,64 @@ func (api *UnixfsAPI) Ls(ctx context.Context, p path.Path, opts ...caopts.Unixfs
Option("stream", true).
Send(ctx)
if err != nil {
return nil, err
return err
}
if resp.Error != nil {
return nil, resp.Error
return err
}
defer resp.Close()

dec := json.NewDecoder(resp.Output)
out := make(chan iface.DirEntry)

go func() {
defer resp.Close()
defer close(out)

for {
var link lsOutput
if err := dec.Decode(&link); err != nil {
if err == io.EOF {
return
}
select {
case out <- iface.DirEntry{Err: err}:
case <-ctx.Done():
}
return
}

if len(link.Objects) != 1 {
select {
case out <- iface.DirEntry{Err: errors.New("unexpected Objects len")}:
case <-ctx.Done():
}
return
for {
var link lsOutput
if err = dec.Decode(&link); err != nil {
if err != io.EOF {
return err
}
return nil
}

if len(link.Objects[0].Links) != 1 {
select {
case out <- iface.DirEntry{Err: errors.New("unexpected Links len")}:
case <-ctx.Done():
}
return
}
if len(link.Objects) != 1 {
return errors.New("unexpected Objects len")
}

l0 := link.Objects[0].Links[0]
if len(link.Objects[0].Links) != 1 {
return errors.New("unexpected Links len")
}

c, err := cid.Decode(l0.Hash)
if err != nil {
select {
case out <- iface.DirEntry{Err: err}:
case <-ctx.Done():
}
return
}
l0 := link.Objects[0].Links[0]

var ftype iface.FileType
switch l0.Type {
case unixfs.TRaw, unixfs.TFile:
ftype = iface.TFile
case unixfs.THAMTShard, unixfs.TDirectory, unixfs.TMetadata:
ftype = iface.TDirectory
case unixfs.TSymlink:
ftype = iface.TSymlink
}
c, err := cid.Decode(l0.Hash)
if err != nil {
return err
}

select {
case out <- iface.DirEntry{
Name: l0.Name,
Cid: c,
Size: l0.Size,
Type: ftype,
Target: l0.Target,

Mode: l0.Mode,
ModTime: l0.ModTime,
}:
case <-ctx.Done():
}
var ftype iface.FileType
switch l0.Type {
case unixfs.TRaw, unixfs.TFile:
ftype = iface.TFile
case unixfs.THAMTShard, unixfs.TDirectory, unixfs.TMetadata:
ftype = iface.TDirectory
case unixfs.TSymlink:
ftype = iface.TSymlink
}
}()

return out, nil
select {
case out <- iface.DirEntry{
Name: l0.Name,
Cid: c,
Size: l0.Size,
Type: ftype,
Target: l0.Target,

Mode: l0.Mode,
ModTime: l0.ModTime,
}:
case <-ctx.Done():
return ctx.Err()
}
}
}

func (api *UnixfsAPI) core() *HttpApi {
Expand Down
28 changes: 20 additions & 8 deletions cmd/ipfs/kubo/daemon.go
Original file line number Diff line number Diff line change
Expand Up @@ -295,7 +295,7 @@ func daemonFunc(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment
if !domigrate {
fmt.Println("Not running migrations of fs-repo now.")
fmt.Println("Please get fs-repo-migrations from https://dist.ipfs.tech")
return fmt.Errorf("fs-repo requires migration")
return errors.New("fs-repo requires migration")
}

// Read Migration section of IPFS config
Expand Down Expand Up @@ -410,13 +410,21 @@ func daemonFunc(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment
}
}

// Private setups can't leverage peers returned by default IPNIs (Routing.Type=auto)
// To avoid breaking existing setups, switch them to DHT-only.
if routingOption == routingOptionAutoKwd {
if key, _ := repo.SwarmKey(); key != nil || pnet.ForcePrivateNetwork {
if key, _ := repo.SwarmKey(); key != nil || pnet.ForcePrivateNetwork {
// Private setups can't leverage peers returned by default IPNIs (Routing.Type=auto)
// To avoid breaking existing setups, switch them to DHT-only.
if routingOption == routingOptionAutoKwd {
log.Error("Private networking (swarm.key / LIBP2P_FORCE_PNET) does not work with public HTTP IPNIs enabled by Routing.Type=auto. Kubo will use Routing.Type=dht instead. Update config to remove this message.")
routingOption = routingOptionDHTKwd
}

// Private setups should not use public AutoTLS infrastructure
// as it will leak their existence and PeerID identity to CA
// and they will show up at https://crt.sh/?q=libp2p.direct
// Below ensures we hard fail if someone tries to enable both
if cfg.AutoTLS.Enabled.WithDefault(config.DefaultAutoTLSEnabled) {
return errors.New("private networking (swarm.key / LIBP2P_FORCE_PNET) does not work with AutoTLS.Enabled=true, update config to remove this message")
}
}

switch routingOption {
Expand All @@ -436,7 +444,7 @@ func daemonFunc(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment
ncfg.Routing = libp2p.NilRouterOption
case routingOptionCustomKwd:
if cfg.Routing.AcceleratedDHTClient.WithDefault(config.DefaultAcceleratedDHTClient) {
return fmt.Errorf("Routing.AcceleratedDHTClient option is set even tho Routing.Type is custom, using custom .AcceleratedDHTClient needs to be set on DHT routers individually")
return errors.New("Routing.AcceleratedDHTClient option is set even tho Routing.Type is custom, using custom .AcceleratedDHTClient needs to be set on DHT routers individually")
}
ncfg.Routing = libp2p.ConstructDelegatedRouting(
cfg.Routing.Routers,
Expand Down Expand Up @@ -467,7 +475,7 @@ func daemonFunc(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment
fmt.Printf("Swarm key fingerprint: %x\n", node.PNetFingerprint)
}

if (pnet.ForcePrivateNetwork || node.PNetFingerprint != nil) && routingOption == routingOptionAutoKwd {
if (pnet.ForcePrivateNetwork || node.PNetFingerprint != nil) && (routingOption == routingOptionAutoKwd || routingOption == routingOptionAutoClientKwd) {
// This should never happen, but better safe than sorry
log.Fatal("Private network does not work with Routing.Type=auto. Update your config to Routing.Type=dht (or none, and do manual peering)")
}
Expand Down Expand Up @@ -512,7 +520,11 @@ take effect.
if err != nil {
return err
}
node.Process.AddChild(goprocess.WithTeardown(cctx.Plugins.Close))
select {
case <-node.Process.Closing():
default:
node.Process.AddChild(goprocess.WithTeardown(cctx.Plugins.Close))
}

// construct api endpoint - every time
apiErrc, err := serveHTTPApi(req, cctx)
Expand Down
4 changes: 2 additions & 2 deletions cmd/ipfs/kubo/init.go
Original file line number Diff line number Diff line change
Expand Up @@ -88,11 +88,11 @@ environment variable:
if it.Err() != nil {
return it.Err()
}
return fmt.Errorf("file argument was nil")
return errors.New("file argument was nil")
}
file := files.FileFromEntry(it)
if file == nil {
return fmt.Errorf("expected a regular file")
return errors.New("expected a regular file")
}

conf = &config.Config{}
Expand Down
Loading
Loading