Commit Graph

76 Commits

Author SHA1 Message Date
Marcin Rataj
b48f7ae429 fix: migrations for Windows (#11010)
* test: add migration tests for Windows and macOS

- add dedicated CI workflow for migration tests on Windows/macOS
- workflow triggers on migration-related file changes only

* build: remove redundant go version checks

- remove GO_MIN_VERSION and check_go_version scripts
- go.mod already enforces minimum version (go 1.25)
- fixes make build on Windows

* fix: windows migration panic by reading config into memory

fixes migration panic on Windows when upgrading from v0.37 to v0.38
by reading the entire config file into memory before performing atomic
operations. this avoids file locking issues on Windows where open files
cannot be renamed.

also fixes:
- TestRepoDir to set USERPROFILE on Windows (not just HOME)
- CLI migration tests to sanitize directory names (remove colons)

minimal fix that solves the "panic: error can't be dealt with
transactionally: Access is denied" error without adding unnecessary
platform-specific complexity.

* fix: set PATH for CLI migration tests in CI

the CLI tests need the built ipfs binary to be in PATH

* fix: use ipfs shutdown for graceful daemon termination in tests

replaces platform-specific signal handling with ipfs shutdown command
which works consistently across all platforms including Windows

* fix: isolate PATH modifications in parallel migration tests

tests running in parallel with t.Parallel() were interfering with each
other through global PATH modifications via os.Setenv(). this caused
tests to download real migration binaries instead of using mocks,
leading to Windows failures due to path separator issues in external tools.

now each test builds its own custom PATH and passes it explicitly to
commands, preventing interference between parallel tests.

* chore: improve error messages in WithBackup

* fix: Windows CI migration test failures

- add .exe extension to mock migration binaries on Windows
- handle repo lock file properly in mock migration binary
- ensure lock is created and removed to prevent conflicts

* refactor: align atomicfile error handling with fs-repo-migrations

- check close error in Abort() before attempting removal
- leave temp file on rename failure for debugging (like fs-repo-15-to-16)
- improves consistency with external migration implementations

* fix: use req.Context in repo migrate to avoid double-lock

The repo migrate command was calling cctx.Context() which has a hidden
side effect: it lazily constructs the IPFS node by calling GetNode(),
which opens the repository and acquires repo.lock. When migrations then
tried to acquire the same lock, it failed with "lock is already held by us"
because go4.org/lock tracks locks per-process in a global map.

The fix uses req.Context instead, which is a plain context.Context with
no side effects. This provides what migrations need (cancellation handling)
without triggering node construction or repo opening.

Context types explained:
- req.Context: Standard Go context for request lifetime, cancellation,
  and timeouts. No side effects.
- cctx.Context(): Kubo-specific method that lazily constructs the full
  IPFS node (opens repo, acquires lock, initializes subsystems). Returns
  the node's internal context.

Why req.Context is correct here:
- Migrations work on raw filesystem (only need ConfigRoot path)
- Command has SetDoesNotUseRepo(true) - doesn't need running node
- Migrations handle their own locking via lockfile.Lock()
- Need cancellation support but not node lifecycle

The bug only appeared with embedded migrations (v16+) because they run
in-process. External migrations (pre-v16) were separate processes, so
each had isolated state. Sequential migrations (forward then backward)
in the same process exposed this latent double-lock issue.

Also adds repo.lock acquisition to RunEmbeddedMigrations to prevent
concurrent migration access, and removes the now-unnecessary daemon
lock check from the migrate command handler.

* fix: use req.Context for migrations and autoconf in daemon startup

daemon.go was incorrectly using cctx.Context() in two critical places:

1. Line 337: migrations call - cctx.Context() triggers GetNode() which
   opens the repo and acquires repo.lock BEFORE migrations run, causing
   "lock is already held by us" errors when migrations try to lock

2. Line 390: autoconf client.Start() - uses context for HTTP timeouts
   and background updater lifecycle, doesn't need node construction

Both now use req.Context (plain Go context) which provides:
- request lifetime and cancellation
- no side effects (doesn't construct node or open repo)
- correct lifecycle for HTTP requests and background goroutines

(cherry picked from commit f4834e797d)
2025-10-08 18:29:16 +02:00
Marcin Rataj
9faefe316f
refactor(ci): optimize build workflows (#10973)
Some checks are pending
CodeQL / codeql (push) Waiting to run
Docker Check / lint (push) Waiting to run
Docker Check / 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
* ci: optimize build workflows

- use go version from go.mod instead of hardcoding
- group platforms by OS for parallel builds
- remove legacy try-build targets

* fix: checkout before setup-go in all workflows

setup-go needs go.mod to be present, so checkout must happen first

* chore: remove deprecated // +build syntax

go 1.17+ uses //go:build, the old syntax is no longer needed

* simplify: remove nofuse tag from CI workflows

- workflows now rely on platform build constraints
- keep make nofuse target for manual builds
- remove unused appveyor.yml

* ci: remove legacy travis variable and fix gateway-conformance

- remove TRAVIS env variable from 4 workflows
- fix gateway-conformance checkout path to match working-directory
- replace deprecated cache-go-action with built-in setup-go caching
2025-09-19 14:44:38 +02:00
Andrew Gillis
501b1f8bc3
feat: require go1.25 for building kubo (#10913)
Some checks are pending
CodeQL / codeql (push) Waiting to run
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
* Require go1.25 for building kubo
* update Dockerfile to fix warnings
2025-08-13 18:01:50 -07:00
Marcin Rataj
8e5ef5503d
fix(ci): docker build (#10914)
* fix(ci): pass -buildvcs=false to go list in Makefile

Docker builds were failing because go list commands in mk/golang.mk
didn't inherit GOFLAGS from the environment, causing empty package
names when .git directory was incomplete.

This issue always existed but was masked until recent changes in
GitHub Actions runners or Docker golang image exposed it.

* fix(ci): use modern ENV key=value format in Dockerfile

Fixes Docker build deprecation warnings.
2025-08-14 01:49:35 +02:00
Henrique Dias
4a8badf98e Revert "build,docker: add support for riscv64"
This reverts commit 765cffe6c2.
2024-01-04 14:37:23 +01:00
Jorropo
765cffe6c2 build,docker: add support for riscv64 2024-01-02 18:21:01 +01:00
Jorropo
196887cbe5 chore: bump go-libp2p v0.22.0 & go1.18&go1.19
Fixes: #9225
2022-09-09 17:09:38 +02:00
kpcyrd
2711028c0a Reproducible Builds: Update GOFLAGS for -trimpath 2022-07-21 03:54:25 +00:00
Marcin Rataj
506ecdf862 fix: kubo-source.tar.gz on dist.ipfs.io
Closes https://github.com/ipfs/distributions/issues/737
2022-07-08 15:23:07 +02:00
Marcin Rataj
82467bc936 refactor: rename to kubo 2022-07-06 18:40:37 +02:00
Adin Schmahmann
d59730f51e
Update Go version to 1.17 (#8815)
* remove building the pre-bundled plugins as shared objects in makefile

* chore: update go version to minimum of 1.17
2022-04-15 14:32:00 -04:00
Gus Eggert
f855bfe6ef
feat: add basic gateway tracing (#8595)
* add deprecation warning when tracer plugins are loaded
* add response format attribute to span in gateway handler
* add note about tracing's experimental status in godoc
* add nil check for TTL when adding name span attrs
* add basic sharness test for integration with otel collector
* add nil check in UnixFSAPI.processLink
* test: sharness check all json objs for swarm span
* add env var docs to docs/environment-variables.md
* chore: pin the otel collector version
* add tracing spans per response type (#8841)
* docs: tracing with jaeger-ui

Co-authored-by: Marcin Rataj <lidel@lidel.org>
2022-04-04 19:24:05 +02:00
Gus Eggert
5c0061e240 Fix space constant 2021-08-13 16:02:23 -04:00
Adin Schmahmann
73e7e023c0 downgrade to 1.15.2 2021-05-12 17:59:20 -04:00
Adin Schmahmann
5a62025cc7 chore: bump minimum go version to 1.15 2021-05-12 17:16:47 -04:00
Steven Allen
a895bac94c build: drop support for darwin-386
The new sys package drops support.
2021-02-25 18:15:45 -08:00
hannahhoward
66e0f8a1d9 build(Makefile): set supported platforms by go-version
Set supported platforms correctly by go version (no darwin-386 for >=1.15, no darwin-arm64 unless
>=1.16), make check-go-version work on mac

License: MIT
Signed-off-by: hannahhoward <hannah@hannahhoward.net>
2021-02-18 20:28:54 -08:00
Adin Schmahmann
48b2f1273a fix: use override GOFLAGS changes from 480defab68 but keep trimpath usage as is 2020-09-09 18:17:03 -04:00
Adin Schmahmann
2535f4de82 Revert "fix: override GOFLAGS"
This reverts commit 480defab68.
2020-09-09 18:17:03 -04:00
Steven Allen
480defab68 fix: override GOFLAGS
That way we can combine our GOFLAGS with the user specified ones.

This also switches to the new -trimpath build flag for reproducible builds.

fixes #7475
2020-07-20 10:32:42 -04:00
@RubenKelevra
179bed8f60 go: bump minimal dependency to 1.14.4
due to major bugfixes in the .4 release
2020-06-05 03:15:57 +02:00
@RubenKelevra
f61e2832a1 upgrade to go 1.14.2 2020-04-30 14:59:22 +02:00
Steven Allen
968e70f1e2 fix: downgrade to go 1.13
Go 1.14 has a timer reset deadlock (https://github.com/golang/go/issues/38070).

This also downgrades quic-go until either a go patch release fixes this issue or
a version of quic-go is released that works with go 1.13.
2020-03-29 18:41:47 -07:00
Steven Allen
5d6d289ce8 chore: update golang 2020-03-27 09:37:37 -07:00
Peter Rabbitson
0819fe6f4a Require go 1.14
A dependency of ours now requires 1.14, let's be more explicit ourselves

../../go/pkg/mod/github.com/lucas-clemente/quic-go@v0.15.2/interface.go:54:2: duplicate method StreamID
../../go/pkg/mod/github.com/lucas-clemente/quic-go@v0.15.2/stream.go:44:2: duplicate method StreamID
note: module requires Go 1.14
2020-03-12 04:25:13 +01:00
flowed
07cbba7c40 Fix Typos 2019-12-25 03:12:41 +00:00
Steven Allen
dba13955e5 chore(build): switch to go 1.13 2019-11-15 05:36:09 -08:00
Steven Allen
aba6c3d2f8 build: fix build when we don't have a full git tree
When building with docker, we don't have a _full_ git repo.
2019-09-04 13:37:20 -07:00
Steven Allen
876d5ba172
Merge pull request #6535 from ipfs/fix/5334
fix {net,open}bsd build by disabling fuse on openbsd
2019-07-22 16:36:02 -07:00
Steven Allen
90c656dc59 fix netbsd build 2019-07-22 16:27:36 -07:00
Steven Allen
94bbc1ca7c fix openbsd build by disabling fuse on openbsd
fixes #5334
2019-07-22 15:58:16 -07:00
Dominic Della Valle
b69365e408 mk: handle stripping paths when GOPATH contains whitespace 2019-07-22 18:32:28 -04:00
Steven Allen
545eb3a462 build: strip GOPATH from build paths
This should help fix some of our problems using plugins with go-ipfs.
2019-06-05 13:22:55 -07:00
Steven Allen
037382239d build: switch from megacheck to golangci-lint
(which includes megacheck)

License: MIT
Signed-off-by: Steven Allen <steven@stebalien.com>
2019-05-14 09:38:29 -07:00
Christopher Buesser
f31dd2aae6 GOCC implementation & fix in make & build scripts
The usage of a native 'go' command has been replaced with a make &
environment variable $GOCC. This enables building with multiple go
versions on a single machine as documented:
  * https://golang.org/doc/install#extra_versions

This enables the usage of:
```bash
$ make install
$ # OR
$ GOCC=go1.12.3 make install
$ # OR
$ GOCC=go1.12.4 make install
```
And the build and test tools now pick up on this change

 On branch go-version-check
 Changes to be committed:
	modified:   Rules.mk
	modified:   bin/check_go_version
	modified:   bin/dist_get
	modified:   bin/maketarball.sh
	modified:   coverage/Rules.mk
	modified:   mk/golang.mk
	modified:   mk/tarball.mk
License: MIT
Signed-off-by: Chris Buesser <christopher.buesser@gmail.com>
2019-04-30 21:22:43 -04:00
Steven Allen
739f762b22 ci: test building with fuse
License: MIT
Signed-off-by: Steven Allen <steven@stebalien.com>
2019-04-18 17:56:00 -07:00
Jakub Sztandera
f08100022c misc: require Go 1.12
License: MIT
Signed-off-by: Jakub Sztandera <kubuxu@protonmail.ch>
2019-04-04 16:37:45 +02:00
Jakub Sztandera
a6053d631a mk: fix maketarball to work with gomod
License: MIT
Signed-off-by: Jakub Sztandera <kubuxu@protonmail.ch>
2019-03-13 23:05:48 +01:00
Jakub Sztandera
c8c0c48e2d mk: change git-hash command to include information about modifications
With this command we will get hash information as well as information if
build was made using uncommited files.

License: MIT
Signed-off-by: Jakub Sztandera <kubuxu@protonmail.ch>
2019-03-07 00:42:19 +01:00
Steven Allen
cc315dc77f
Merge pull request #6059 from ipfs/fix/make-build
mk: fix make install by not setting GOBIN
2019-03-06 13:31:23 -08:00
Jakub Sztandera
061128d1d3 mk: fix make install by not setting GOBIN
License: MIT
Signed-off-by: Jakub Sztandera <kubuxu@protonmail.ch>
2019-03-06 22:21:14 +01:00
Jakub Sztandera
3589eb989e go: require Golang 1.11.4
mod.sum generation had a fix in this version which probably is the
reason for #6056

License: MIT
Signed-off-by: Jakub Sztandera <kubuxu@protonmail.ch>
2019-03-06 13:27:52 +01:00
Jakub Sztandera
76f7a7694d gomod/mk: set GO111MODULE in Makefile
License: MIT
Signed-off-by: Jakub Sztandera <kubuxu@protonmail.ch>
2019-03-05 18:37:44 +01:00
Jakub Sztandera
21f3dae696 gomod: remove gopath check
License: MIT
Signed-off-by: Jakub Sztandera <kubuxu@protonmail.ch>
2019-03-05 18:33:58 +01:00
Jakub Sztandera
27f73fa7e4 gomod: use test binaries from go modules
License: MIT
Signed-off-by: Jakub Sztandera <kubuxu@protonmail.ch>
2019-03-05 18:33:58 +01:00
Jakub Sztandera
3e199ab3f7 mk: s/go-build/go-build-relative/
License: MIT
Signed-off-by: Jakub Sztandera <kubuxu@protonmail.ch>
2019-03-05 18:33:58 +01:00
Jakub Sztandera
7f80485d93 mk: remove gx from Makefiles
License: MIT
Signed-off-by: Jakub Sztandera <kubuxu@protonmail.ch>
2019-03-05 18:33:58 +01:00
Jakub Sztandera
16cfe4a5ea gomod: add coverage tools to go.mod
License: MIT
Signed-off-by: Jakub Sztandera <kubuxu@protonmail.ch>
2019-03-05 18:33:58 +01:00
Łukasz Magiera
d8a92224a7 ci: test on 32bit os
License: MIT
Signed-off-by: Łukasz Magiera <magik6k@gmail.com>
2019-03-04 19:20:51 -08:00
Steven Allen
2aab5b9fba unexport GOFLAGS
We want to explicitly pass these where we need them.

fixes #5733

License: MIT
Signed-off-by: Steven Allen <steven@stebalien.com>
2018-11-06 14:26:38 -08:00