Commit Graph
131 Commits
Author SHA1 Message Date
Nicolas De Loof 7c2c393d74 ci: lint, vet and test relay/ as its own module
relay/ (github.com/docker/compose-relay) is a separate go.mod: root
`go vet`/`golangci-lint`/`go test` never covered it, and the local
pre-commit hook explicitly excludes any directory with its own go.mod
for the same reason. Only the image build (relay-image-cross) was ever
validated in CI -- the Go source itself had no quality gate.

Adds relay-lint and relay-test bake targets, mirroring the root lint/
test Dockerfile stages: a build-base downloading go.mod's (currently
empty) dependency set, a lint stage running the same pinned
golangci-lint version as the root, and a test stage running go vet
then go test. relay-lint joins the "validate" bake group; both are new
matrix entries in the CI validate job.

relay/ gets its own .golangci.yml (the lint stage's build context is
"./relay" only, so it can't see the root config) with the same rule
set as root, minus what doesn't apply to a dependency-free module
(the e2e build tag, testify/gotest.tools-specific depguard entries).

Turning lint on for the first time surfaced 8 real findings in
relay/main.go and main_test.go (unchecked Close() errors, %v instead
of %w on a wrapped error, a redundant embedded-field selector, and
log.Fatalf after a defer that would never run) -- fixed here so the
new job is green from the start, not merged red.

Signed-off-by: Nicolas De Loof <[email protected]>
2026-09-17 09:23:54 +02:00
Nicolas De Loof 7af58e3626 test(e2e): gate the e2e suite behind the build tag the docs already promise
AGENTS.md documents 'Test unit: go test ./pkg/...' and 'E2E tests:
go test -tags e2e ./pkg/e2e/'. Both statements were false: no file in
pkg/e2e carried an e2e build constraint, so the -tags flag was a no-op
and the 'unit' command actually launched the full e2e suite — requiring
a Docker daemon and the locally built binary, creating and destroying
containers, for up to 20 minutes. CI only avoided this by grepping e2e
out of the package list (Dockerfile).

Every *_test.go in pkg/e2e now carries //go:build e2e (merged with the
existing !windows constraints), and the Makefile e2e targets pass the
tag. The documented commands become true:
- go test ./pkg/...          -> pkg/e2e reports [no test files]
- go test -tags e2e ./pkg/e2e -> runs the suite

AGENTS.md now also states the daemon/binary prerequisites explicitly.

Part of #14074 (A: the code misdescribes its own structure).

Signed-off-by: Nicolas De Loof <[email protected]>
2026-08-27 11:02:07 +02:00
Nicolas De Loof 6443bc1da2 chore(mocks): fix the stale mockgen invocation and pin its version
The `mocks` target still passed the pre-rename `Service` argument to
mockgen (the interface is `Compose` since the rename) and installed
whatever mockgen happened to be on PATH. Run it through `go run` with a
pinned version so regeneration is reproducible; v0.4.0 is the last
version usable here, as the package mode introduced in v0.5 copies
parameter names from the mocked source and moby's APIClient names its
variadic options `_`, which produces invalid Go code.

Regenerated pkg/mocks with the fixed invocation (header-only change).

Signed-off-by: Nicolas De Loof <[email protected]>
2026-08-20 15:16:43 +02:00
Guillaume Lours 8bd79da4bc e2e: fix test resource isolation and make standalone parallelism configurable
Several e2e tests used fixed host ports (8070, 8080, 8090, etc.), global
buildx builders registered with --use, and a hardcoded IPC container name.
Under parallel execution these shared daemon-level resources caused port
conflicts, buildkitd container-name collisions, and intermittent failures.
Separately, the standalone make target hardcoded -parallel=1, forcing the
entire standalone suite to run serially even though the same tests run in
parallel in plugin mode.

Changes:
- Convert fixed host ports in four fixtures (network-test, sentences,
  build-test, volume-test) to ephemeral bindings; add ServicePublishedPort
  helper to framework.go to resolve the actual mapped port at runtime.
- Give each buildx-builder test a unique daemon-scoped name via BuilderName
  helper, preventing container-name collisions between parallel goroutines.
  Applies to TestBuildPlatformsWithCorrectBuildxConfig, TestBuildPrivileged,
  TestBuildBuilder, TestBuildEntitlements, TestBuildTLS.
- Rename the fixed ipc_mode_container to a project-scoped name
  (ipc_e2e-src) and update the ipc-test fixture accordingly.
- Replace the hardcoded -parallel=1 in make e2e-compose-standalone with
  E2E_PARALLEL_PLUGIN?=4 and E2E_STANDALONE_PARALLEL?=4, aligning both
  modes with the effective GOMAXPROCS on 4-core GitHub Actions runners.
  Both variables are overridable (E2E_STANDALONE_PARALLEL=1 restores
  serial local debugging).
- Raise the poll delay in watch_test.go long-running polls (90s/120s
  timeout) from the default 100ms to 1s; bump cascade_test.go and
  publish_test.go from 100ms to 500ms. Reduces CPU pressure without
  affecting effective test duration.

The logging-driver fixture retains its fixed port 24224: the Docker fluentd
log driver encodes fluentd-address at service-start time, making ephemeral
resolution non-trivial. TestLoggingDriver is serial so there is no
collision risk in practice.

Signed-off-by: Guillaume Lours <[email protected]>
2026-08-19 17:41:02 +02:00
Nicolas De LoofandClaude Fable 5 f1af7ec0cf ci: raise e2e go-test timeout to 20m
The e2e suite runs with the Go default 10-minute test timeout (no
-timeout flag). Its cumulative duration on the slowest matrix leg
(standalone, oldstable, graphdriver) now reaches ~11 minutes of
in-binary time on slower runners, so the whole suite gets killed at
600s with whatever tests were in flight reported as failed — observed
repeatedly across unrelated PRs. Give the suite explicit headroom;
the surrounding CI job timeout still bounds the total.

Co-Authored-By: Claude Fable 5 <[email protected]>
Signed-off-by: Nicolas De Loof <[email protected]>
2026-08-17 11:09:19 +02:00
Sebastiaan van Stijn bfb5511d0d go.mod: bump github.com/moby/moby/api v1.53.0, moby/client v0.2.2
Also update TestDefaultNetworkSettings:
Test that the network with the highest priority is returned as
"primary" network, and other networks as extra networks.

Signed-off-by: Sebastiaan van Stijn <[email protected]>
2026-02-11 12:32:37 +01:00
Nicolas De Loof 3783b8ada3 fsnotify is set in Dockerfile
Signed-off-by: Nicolas De Loof <[email protected]>
2026-01-21 08:47:40 +01:00
Nicolas De Loof e22426443e Introduced fsnotify build tag to select watcher implementation
Signed-off-by: Nicolas De Loof <[email protected]>
2025-12-15 10:16:12 +01:00
Nicolas De Loof 2b4543935c next release will be major version v5.x
Signed-off-by: Nicolas De Loof <[email protected]>
2025-11-13 09:32:43 +01:00
Guillaume Lours 5a063b7510 fix provider concurrent environment map accesses
Signed-off-by: Guillaume Lours <[email protected]>
2025-06-30 19:07:10 +02:00
Nicolas De Loof 65696bb1cb make fmt so any contributor can enforce formatting
Signed-off-by: Nicolas De Loof <[email protected]>
2024-12-17 16:50:14 +01:00
Joana Hrotko da434013e3 Remove COMPOSE_MENU env from e2e tests
Signed-off-by: Joana Hrotko <[email protected]>
2024-07-01 16:31:12 +01:00
Guillaume Lours da8189cf22 Bump docker engine and cli to version 26.1.3
Signed-off-by: Guillaume Lours <[email protected]>
2024-05-17 13:18:14 +02:00
Joana Hrotko e9dc82011f Add Navigation Menu to compose up
Signed-off-by: Joana Hrotko <[email protected]>
2024-03-22 17:48:25 +01:00
Joana Hrotko 34b11c4f4f Add test summary for test jobs in ci
Signed-off-by: Joana Hrotko <[email protected]>
2024-03-01 13:32:04 +01:00
Nicolas De Loof 74cc091225 github.com/golang/mock is deprecated
Signed-off-by: Nicolas De Loof <[email protected]>
2023-12-13 14:47:39 +01:00
Ulysses Souza 8ea7c9e0d2 Make it context aware and add test skipping options
Signed-off-by: Ulysses Souza <[email protected]>
2023-11-15 21:09:50 +01:00
Guillaume Lours 14b43c1a93 remove cucumber tests as we haven't added new ones for a while
Signed-off-by: Guillaume Lours <[email protected]>
2023-10-10 09:57:25 +02:00
Djordje Lukic 78f3361921 ci: enable verbose output for e2e tests (#11045)
It's easier to see that something is happening.

Signed-off-by: Djordje Lukic <[email protected]>
2023-09-27 16:29:54 +00:00
Milas Bowman e63ab14b1e ci: merge Go coverage reports before upload (#10666)
Attempting to fix the state of codecov action checks right now,
which are behaving very erratically.

Using the new functionality in Go 1.20 to merge multiple reports,
so now the unit & E2E coverage data reports are stored as artifacts
and then downloaded, merged, and finally uploaded to codecov as a
new job.

Additionally, add a `codecov.yml` config and try to turn down the
aggressiveness of it for CI checks.

Signed-off-by: Milas Bowman <[email protected]>
2023-06-08 14:58:21 -04:00
Guillaume Lours 83ad5e97b7 add Windows drive prefix to temp dir usage in the doc generation task
Signed-off-by: Guillaume Lours <[email protected]>
2023-05-31 10:18:23 +02:00
Milas Bowman 3b85cd2fa9 test: fix e2e commands on Windows
Instead of trying to make this work nicely cross-platform,
just push the Coverage logic into the GitHub Actions job,
as that's really where we care about it.

(It's surprisingly difficult to make this nicely portable;
to make PowerShell not error out if the path does not exist
you have to ignore ALL errors and the way that env vars are
passed to processes is not the same.)

Signed-off-by: Milas Bowman <[email protected]>
2023-03-24 11:50:05 -04:00
Tianon Gravi fc4d2dfdd8 Remove "-s" from LDFLAGS
While this stripping does decrease the binary size by some amount, it also removes the ability for `govulncheck` (https://go.dev/blog/vuln) to scan the binary for actual uses of vulnerable functions, requiring the user to clone the code locally and hope they're testing against the same version of the stdlib, etc that the binary was built with.  If we stop passing `-s`, then we can then run `govulncheck` on the binary directly (making it easier to flag both false positives in CVE scans _and_ actual issues worth looking into).

Here's an example of the output on a freshly built binary with this change:

```console
$ govulncheck ./bin/build/docker-compose
govulncheck is an experimental tool. Share feedback at https://go.dev/s/govulncheck-feedback.

Using [email protected] with
vulnerability data from https://vuln.go.dev (last modified 27 Feb 23 16:29 UTC).

Scanning your binary for known vulnerabilities...
No vulnerabilities found.
```

Compared to the 1.16.0 release binary:

```console
$ govulncheck ./docker-compose
go: downloading golang.org/x/vuln v0.0.0-20230224180816-edec1fb0a9c7
govulncheck is an experimental tool. Share feedback at https://go.dev/s/govulncheck-feedback.

Using [email protected] with
vulnerability data from https://vuln.go.dev (last modified 27 Feb 23 16:29 UTC).

Scanning your binary for known vulnerabilities...
govulncheck: vulncheck.Binary: reading go:func.*: no symbol "go:func.*"
```

It's not 100% apples-to-apples, but the size difference between these binaries is ~46MiB for the 1.16.0 release and ~52MiB for the binary I built from this commit.

Signed-off-by: Tianon Gravi <[email protected]>
2023-03-13 08:16:48 +00:00
Nicolas De Loof 85ddfde5d6 use go 1.20 -cover support
Signed-off-by: Nicolas De Loof <[email protected]>
2023-03-10 16:54:39 +00:00
Nicolas De Loof 7a42ba7eec use CGO to enable fsevent on OSX
Signed-off-by: Nicolas De Loof <[email protected]>
2023-02-10 17:24:48 +01:00
Milas Bowman 5b043c4d59 ci: don't use -race on Windows
I misunderstood the cause of the symptom in #10261 - thought that
we'd explicitly turned off CGO for Windows with some of the build
changes recently, but we don't even have `gcc` on the CI node, so
it's actually just `-race` entirely that's the trouble.

For right now, going the easy route and disabling it. We can look
at getting a C toolchain on the Windows machine later.

Signed-off-by: Milas Bowman <[email protected]>
2023-02-10 15:51:48 +01:00
Milas Bowman 15f7104cd3 ci: use CGO for tests to enable race detector
```
go: -race requires cgo; enable cgo by setting CGO_ENABLED=1
```

We're explicitly using CGO on macOS now for FSEvents support and
purposefully NOT using CGO on other platforms since we don't need
it.

The race detector (`-race`) requires it, however, so for the e2e
make task, it should alway be on.

Signed-off-by: Milas Bowman <[email protected]>
2023-02-09 13:29:51 -05:00
Laura Brehm 4ad87463c5 Add 🥒 GHA workflow
Signed-off-by: Laura Brehm <[email protected]>
2023-01-11 14:13:10 +01:00
Ulysses Souza 0c1979979f Remove unused kube tag
Signed-off-by: Ulysses Souza <[email protected]>
2023-01-09 14:52:11 +01:00
Guillaume Lours 86a648bd51 e2e tests display Compose version used to run the test
currently the version displayed is the one installed and not the one use for the tests

Signed-off-by: Guillaume Lours <[email protected]>
2022-12-21 18:38:24 +01:00
Guillaume Lours 27a3241934 rely on CI timeout
Signed-off-by: Guillaume Lours <[email protected]>
2022-12-21 16:11:56 +01:00
Guillaume Lours cc247fdb84 remove go.* from e2e tests directory
Signed-off-by: Guillaume Lours <[email protected]>
2022-12-08 19:06:22 +01:00
Milas BowmanandNick Sieger 053f20edab port: improve error-handling if port not found (#10039)
This method looked slightly incomplete. If the port wasn't found,
it'd return `err`, but that was always `nil`, so we'd print out
`:0`.

Now, we construct a nice error message with the targeted port and
the ones we found.

The `--protocol` flag is also now case-insensitive to prevent any
weirdness/confusion there.

Co-authored-by: Nick Sieger <[email protected]>
Signed-off-by: Milas Bowman <[email protected]>
2022-12-05 22:11:45 +00:00
Laura Brehm 7424a3d3c1 Fix Makefile target validate-go-mod to only run correct bakefile target
Signed-off-by: Laura Brehm <[email protected]>
2022-10-18 15:38:41 +02:00
Ulysses Souza 91eae4f035 Add Codecov
Signed-off-by: Ulysses Souza <[email protected]>
2022-10-17 15:32:51 +02:00
Laura Brehm c6109b2e5c Add Makefile, buildx target to ensure root and e2e go.mod are kept in sync
Signed-off-by: Laura Brehm <[email protected]>
2022-09-27 02:35:57 +02:00
Laura Brehm 0dc64723c9 Restore -s in uname OS detection logic in Makefile
Signed-off-by: Laura Brehm <[email protected]>
2022-09-21 10:19:00 -04:00
Laura Brehm 6bc50cb457 Rework Makefile for better Windows support
Fixes error when attempting to run `uname` on Windows, and add `.exe` to built binary on `make` if on Windows

Signed-off-by: Laura Brehm <[email protected]>
2022-09-20 11:33:31 -04:00
CrazyMax 69651136cf Makefile: mutualize local and Dockerfile build opts (#9776)
Ensure that everything works nicely for `docker-ce-packaging`
as well as local development.

Signed-off-by: CrazyMax <[email protected]>
2022-08-26 16:06:24 -04:00
CrazyMax 5ec20296e4 Better sandboxed workflow and enhanced cross compilation
Signed-off-by: CrazyMax <[email protected]>
2022-08-12 15:05:58 +02:00
Sebastiaan van Stijn 92f32b5c79 ci: use latest stable dockerfile syntax & rename docs Dockerfile (#9711)
* update dockerfiles to use latest stable syntax

Some Dockerfiles were pinned to a minor release, which meant they
wouldn't be updated to get the latest stable syntax (and fixes),
and one Dockerfile used the "labs" variant to use the HEREDOC syntax,
which has now been promoted to the stable syntax.

* docs: rename Dockerfile

There's no other Dockerfiles in the same path, so the "docs"
prefix was redundant.

Signed-off-by: Sebastiaan van Stijn <[email protected]>
2022-08-03 16:36:13 -04:00
Guillaume Lours 978b2f8265 add new targets to build Compose binary before running e2e tests
Signed-off-by: Guillaume Lours <[email protected]>
2022-07-04 15:53:08 +02:00
Nick Sieger 3599fc8533 mocks: create mocks for compose api.Service
Signed-off-by: Nick Sieger <[email protected]>
2022-06-07 17:09:06 -05:00
Ulysses Souza e51fd0a844 Fix local run of make e2e-compose-standalone
Signed-off-by: Ulysses Souza <[email protected]>
2022-05-20 21:31:16 +02:00
Randy Fay 97d46a14ef Fix problems with ddev e2e test and minor cleanup, add tmate (#27)
* Add tmate for debugging
* Use -parallel=1 for standaone tests

Signed-off-by: Randy Fay <[email protected]>
2022-05-19 14:14:03 +02:00
Ulysses Souza a5a1c5f2f1 Add ddev's e2e test
Signed-off-by: Ulysses Souza <[email protected]>
2022-05-19 14:14:03 +02:00
Guillaume Lours be187bae64 use a temp directory to generate doc to be sure working tree is clean
Signed-off-by: Guillaume Lours <[email protected]>
2022-03-18 10:42:05 +01:00
Guillaume Lours bf26cbd498 contenairized documetation generation
add docs validation (using same process a BuildX project)

Signed-off-by: Guillaume Lours <[email protected]>
2022-03-18 10:42:05 +01:00
Nicolas De Loof 283f7a1ec5 Bump buildx to v0.8.0
Signed-off-by: Nicolas De Loof <[email protected]>
2022-03-11 14:05:55 +01:00
Ulysses Souza 8ae8d99528 Use build tags for selecting e2e test mode
Signed-off-by: Ulysses Souza <[email protected]>
2021-12-09 10:52:18 +01:00