Commit Graph

1345 Commits

Author SHA1 Message Date
Ignacio Lopez
8477a85ce6 feat(model): reject runtime flags in model configuration
Signed-off-by: Ignacio López Luna <ignasi.lopez.luna@gmail.com>
2025-11-28 18:52:36 +01:00
Nicolas De Loof
e0977c2df1 only check for env_file
Signed-off-by: Nicolas De Loof <nicolas.deloof@gmail.com>
2025-11-28 09:48:55 +01:00
Nicolas De Loof
2d569916fe skip includes preparing publish
Signed-off-by: Nicolas De Loof <nicolas.deloof@gmail.com>
2025-11-28 09:41:43 +01:00
liuyueyangxmu
3975f02153 refactor: use strings.Builder to improve performance
Signed-off-by: liuyueyangxmu <liuyueyangxmu@outlook.com>
2025-11-26 10:52:24 +01:00
Nicolas De Loof
fa832d72d7 Added support for build.no_cache_filter
Signed-off-by: Nicolas De Loof <nicolas.deloof@gmail.com>
2025-11-26 09:37:04 +01:00
vicerace
822f5a702b refactor: replace Split in loops with more efficient SplitSeq
Signed-off-by: vicerace <vicerace@sohu.com>
2025-11-25 11:37:03 +01:00
Nicolas De Loof
6f365395e5 Fix support for port range
Signed-off-by: Nicolas De Loof <nicolas.deloof@gmail.com>
2025-11-16 20:38:54 +01:00
Sebastiaan van Stijn
c47b8c32e3 Dockerfile: update golangci-lint to v2.6.2
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2025-11-16 14:54:58 +01:00
Sebastiaan van Stijn
89d3944837 fix linting issues
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2025-11-16 14:54:58 +01:00
Nicolas De Loof
d7e5f20eb6 images command should display image Created time or N/A if not available
Signed-off-by: Nicolas De Loof <nicolas.deloof@gmail.com>
2025-11-13 09:40:56 +01:00
Nicolas De Loof
2b4543935c next release will be major version v5.x
Signed-off-by: Nicolas De Loof <nicolas.deloof@gmail.com>
2025-11-13 09:32:43 +01:00
Nicolas De Loof
6e55832b1c add (restore) support for detach keys
Signed-off-by: Nicolas De Loof <nicolas.deloof@gmail.com>
2025-11-12 14:23:58 +01:00
Nicolas De Loof
45def51117 make DRYRUN_PREFIX a display attribute, move DryRunClient out of pkg/api
Signed-off-by: Nicolas De Loof <nicolas.deloof@gmail.com>
2025-11-12 11:17:28 +01:00
Nicolas De Loof
aff5c115d6 move progress UI components into cmd
Signed-off-by: Nicolas De Loof <nicolas.deloof@gmail.com>
2025-11-12 11:17:28 +01:00
Nicolas De Loof
5ef495c898 removed unecessary check
Signed-off-by: Nicolas De Loof <nicolas.deloof@gmail.com>
2025-11-12 08:34:29 +01:00
Jonty
dc90c4e44d Grammatical fix
Signed-off-by: Jonty <jontyleslie@gmail.com>
2025-11-10 11:34:18 +01:00
Jonty
91e1753d80 Grammatical fix
Signed-off-by: Jonty <jontyleslie@gmail.com>
2025-11-10 11:34:18 +01:00
Jonty
9db27a65c6 Making the American/British spellings consistent to the error messages
Signed-off-by: Jonty <jontyleslie@gmail.com>
2025-11-10 11:34:18 +01:00
Nicolas De Loof
7eb5adeef6 introduce --insecure-registry, reserved for testing purpose
Signed-off-by: Nicolas De Loof <nicolas.deloof@gmail.com>
2025-11-06 16:17:21 +01:00
Suleiman Dibirov
67e39a41f2 fixes
Signed-off-by: Suleiman Dibirov <idsulik@gmail.com>
2025-11-06 08:02:59 +01:00
Suleiman Dibirov
dc1283289d fix: use NewParallelCLI in compose_run_build_once_test.go
Signed-off-by: Suleiman Dibirov <idsulik@gmail.com>
2025-11-06 08:02:59 +01:00
Nicolas De Loof
af579ebd4b drop support for internal buildkit builder
Signed-off-by: Nicolas De Loof <nicolas.deloof@gmail.com>
2025-11-04 11:36:40 +01:00
Nicolas De Loof
fc2a7d13fa from Compose CLI, we know the streams used to configure LogConsumer
Signed-off-by: Nicolas De Loof <nicolas.deloof@gmail.com>
2025-11-04 10:25:14 +01:00
Nicolas De Loof
d70bb8cf5e distinguish event (short) status text and details
Signed-off-by: Nicolas De Loof <nicolas.deloof@gmail.com>
2025-11-04 10:18:55 +01:00
Nicolas De Loof
bff3d35305 render events in order they were first received
Signed-off-by: Nicolas De Loof <nicolas.deloof@gmail.com>
2025-11-04 10:18:55 +01:00
Guillaume Lours
d74274bc04 Add LoadProject method to Compose SDK API
This commit adds a new LoadProject method to the Compose service API,
allowing SDK users to programmatically load Compose projects with full
control over the loading process.

Changes:

1. New API method (pkg/api/api.go):
   - LoadProject(ctx, ProjectLoadOptions) (*types.Project, error)
   - ProjectLoadOptions struct with all loader configuration
   - LoadListener callback for event notifications (metrics, etc.)
   - ProjectOptionsFns field for compose-go loader options

2. Implementation (pkg/compose/loader.go):
   - createRemoteLoaders: Git and OCI remote loader setup
   - buildProjectOptions: Translates ProjectLoadOptions to compose-go options
   - postProcessProject: Service filtering, labels, resource pruning

3. Unit test (pkg/compose/loader_test.go):
   - Tests basic project loading functionality
   - Verifies ProjectOptionsFns with cli.WithoutEnvironmentResolution

4. Mock update (pkg/mocks/mock_docker_compose_api.go):
   - Added LoadProject to mock interface

Key design decisions:
- LoadListener pattern keeps metrics collection in CLI, not SDK
- ProjectOptionsFns exposes compose-go options directly (e.g., cli.WithInterpolation(false))
- Post-processing in SDK: labels, service filtering, resource pruning
- Environment resolution NOT in SDK (command responsibility)
- Compatibility mode handling (api.Separator)

Signed-off-by: Guillaume Lours <705411+glours@users.noreply.github.com>
2025-11-03 08:58:30 +01:00
Stanislav Zhuk
10f15cacdd fix typo in error message
Signed-off-by: Stanislav Zhuk <stasadev@gmail.com>
2025-11-03 08:38:49 +01:00
Guillaume Lours
3658a063bb add AlwaysOkPrompt to replace 'AlwaysYes' current implementation'
Signed-off-by: Guillaume Lours <705411+glours@users.noreply.github.com>
2025-11-03 08:01:59 +01:00
Sebastiaan van Stijn
74a4ccdd85 fix various linting issues
Got these when running locally on a more recent version of golangci-lint:

    pkg/compose/build_bake.go:187:3: importShadow: shadow of imported from 'github.com/docker/cli/cli/command/image/build' package 'build' (gocritic)
                    build := *service.Build
                    ^
    pkg/compose/build_bake.go:526:19: importShadow: shadow of imported from 'github.com/docker/cli/cli/command/image/build' package 'build' (gocritic)
    func toBakeAttest(build types.BuildConfig) []string {
                      ^
    pkg/compose/create.go:1453:2: importShadow: shadow of imported from 'github.com/docker/docker/api/types/network' package 'network' (gocritic)
            network string,
            ^
    pkg/compose/create.go:1468:2: importShadow: shadow of imported from 'github.com/docker/docker/api/types/network' package 'network' (gocritic)
            network string,
            ^
    pkg/compose/monitor.go:42:17: importShadow: shadow of imported from 'github.com/docker/compose/v2/pkg/api' package 'api' (gocritic)
    func newMonitor(api client.APIClient, project string) *monitor {
                    ^
    cmd/compose/config.go:337:1: File is not properly formatted (gofumpt)
            return
    ^
    pkg/compose/convergence.go:608:1: File is not properly formatted (gofumpt)
                    return
    ^
    pkg/compose/cp.go:335:1: File is not properly formatted (gofumpt)
                    return
    ^
    pkg/e2e/compose_up_test.go:35:10: go-require: c.RunDockerComposeCmd contains assertions that must only be used in the goroutine running the test function (testifylint)
                    res := c.RunDockerComposeCmd(t, "-f", "fixtures/dependencies/deps-completed-successfully.yaml", "--project-name", projectName, "up", "--wait", "-d")
                           ^
    pkg/e2e/healthcheck_test.go:42:10: go-require: c.RunDockerComposeCmd contains assertions that must only be used in the goroutine running the test function (testifylint)
                    res := c.RunDockerComposeCmd(t, "-f", "fixtures/start_interval/compose.yaml", "--project-name", projectName, "up", "--wait", "-d", "test")
                           ^
    10 issues:
    * gocritic: 5
    * gofumpt: 3
    * testifylint: 2

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2025-10-31 17:44:38 +01:00
Guillaume Lours
6719f47bd4 test checking bake internal load build definition
Signed-off-by: Guillaume Lours <705411+glours@users.noreply.github.com>
2025-10-30 21:25:32 +01:00
Suleiman Dibirov
c416ea7036 fix compose_run_build_once_test.go
Signed-off-by: Suleiman Dibirov <idsulik@gmail.com>
2025-10-30 10:08:29 +01:00
Suleiman Dibirov
0d396bbacb fix(git): Add validation for Git subdirectory paths to prevent traversal
Signed-off-by: Suleiman Dibirov <idsulik@gmail.com>
2025-10-30 10:08:29 +01:00
Suleiman Dibirov
fc74c78963 Update e2e tests in compose_run_build_once_test.go to use project names for Docker Compose commands.
Signed-off-by: Suleiman Dibirov <idsulik@gmail.com>
2025-10-29 10:47:18 +01:00
Suleiman Dibirov
658bff335f Revert "no parallel in compose_run_build_once_test.go"
This reverts commit e4f4a5aa86.

Signed-off-by: Suleiman Dibirov <idsulik@gmail.com>
2025-10-29 10:47:18 +01:00
Suleiman Dibirov
80030e1390 no parallel in compose_run_build_once_test.go
Signed-off-by: Suleiman Dibirov <idsulik@gmail.com>
2025-10-29 10:47:18 +01:00
Suleiman Dibirov
6a35be5112 lint fix
Signed-off-by: Suleiman Dibirov <idsulik@gmail.com>
2025-10-29 10:47:18 +01:00
Suleiman Dibirov
0c854a6ab7 add e2e tests
Signed-off-by: Suleiman Dibirov <idsulik@gmail.com>
2025-10-29 10:47:18 +01:00
Suleiman Dibirov
557e0b6ec7 fix(run): Ensure images exist only for the target service in run command
Signed-off-by: Suleiman Dibirov <idsulik@gmail.com>
2025-10-29 10:47:18 +01:00
Nicolas De Loof
a8933c91e7 stop progress UI during build to prevent interference with buildkit Display
Signed-off-by: Nicolas De Loof <nicolas.deloof@gmail.com>
2025-10-29 10:11:30 +01:00
Nicolas De Loof
7e3993bcac skip Start[ed|ing] events to avpd mix with container logs
Signed-off-by: Nicolas De Loof <nicolas.deloof@gmail.com>
2025-10-29 10:11:30 +01:00
Nicolas De Loof
fd4f2f99cf register TTYWritter as an Event Processor
Signed-off-by: Nicolas De Loof <nicolas.deloof@gmail.com>
2025-10-29 10:11:30 +01:00
Nicolas De Loof
ae25d27e5a remove unused RunWithStatus, always pass operation as title
Signed-off-by: Nicolas De Loof <nicolas.deloof@gmail.com>
2025-10-29 10:11:30 +01:00
Nicolas De Loof
394466683a use eventBus to collect tasks progress
Signed-off-by: Nicolas De Loof <nicolas.deloof@gmail.com>
2025-10-29 10:11:30 +01:00
Nicolas De Loof
e5c8b68642 decouple Event from tty progress writer
Signed-off-by: Nicolas De Loof <nicolas.deloof@gmail.com>
2025-10-29 10:11:30 +01:00
Nicolas De Loof
bf50c99193 pretend cli.Out is a containerd console.File
Signed-off-by: Nicolas De Loof <nicolas.deloof@gmail.com>
2025-10-28 14:39:50 +01:00
Guillaume Lours
8274be8d08 configure Compose service with io.Reader and io.Writer
remove usage of internal IO interfaces

Signed-off-by: Guillaume Lours <705411+glours@users.noreply.github.com>
2025-10-27 18:54:10 +01:00
Guillaume Lours
86e91e010d Add streamOverrideWrapper to intercepts command.Cli stream methods and transparently returns custom streams when provided via options
Add new GetConfiguredStreams function to Compose API definition

Signed-off-by: Guillaume Lours <705411+glours@users.noreply.github.com>
2025-10-27 16:17:50 +01:00
Guillaume Lours
e1678c5c43 Introduce abstractions to support SDK usage without requiring Docker CLI
This commit prepares the Compose service for SDK usage by abstracting away
the hard dependency on command.Cli. The Docker CLI remains the standard path
for the CLI tool, but SDK users can now provide custom implementations of
streams and context information.

Signed-off-by: Guillaume Lours <705411+glours@users.noreply.github.com>
2025-10-27 16:17:50 +01:00
Nicolas De Loof
5924387e89 run hooks on restart
Signed-off-by: Nicolas De Loof <nicolas.deloof@gmail.com>
2025-10-27 10:24:18 +01:00
Nicolas De Loof
7f668bd7fe Setup Compose service using functional parameters
This commit introduces WithMaxConcurrency and WithDryRun to replace direct mutators on composeService
commands and flags are translated into a set of functional parameters which are eventually applied
as a ComposeService is created just before being actually used by a command

Signed-off-by: Nicolas De Loof <nicolas.deloof@gmail.com>
2025-10-24 18:24:21 +02:00