From 35f3e64de871ff7575754b8eee4e4f52ce0e0cda Mon Sep 17 00:00:00 2001 From: Nicolas De Loof Date: Thu, 6 Mar 2025 16:12:51 +0100 Subject: [PATCH] only load env_file after services have been selected Signed-off-by: Nicolas De Loof --- cmd/compose/compose.go | 7 ++++++- go.mod | 2 +- go.sum | 4 ++-- pkg/e2e/env_file_test.go | 7 +++++++ pkg/e2e/fixtures/env_file/compose.yaml | 8 ++++++++ 5 files changed, 24 insertions(+), 4 deletions(-) create mode 100644 pkg/e2e/fixtures/env_file/compose.yaml diff --git a/cmd/compose/compose.go b/cmd/compose/compose.go index 450bb165734..7f83bf8a550 100644 --- a/cmd/compose/compose.go +++ b/cmd/compose/compose.go @@ -170,7 +170,7 @@ func (o *ProjectOptions) WithServices(dockerCli command.Cli, fn ProjectServicesF return Adapt(func(ctx context.Context, args []string) error { options := []cli.ProjectOptionsFn{ cli.WithResolvedPaths(true), - cli.WithDiscardEnvFile, + cli.WithoutEnvironmentResolution, } project, metrics, err := o.ToProject(ctx, dockerCli, args, options...) @@ -180,6 +180,11 @@ func (o *ProjectOptions) WithServices(dockerCli command.Cli, fn ProjectServicesF ctx = context.WithValue(ctx, tracing.MetricsKey{}, metrics) + project, err = project.WithServicesEnvironmentResolved(true) + if err != nil { + return err + } + return fn(ctx, project, args) }) } diff --git a/go.mod b/go.mod index 2379090f0ba..784d6d82c3e 100644 --- a/go.mod +++ b/go.mod @@ -7,7 +7,7 @@ require ( github.com/Microsoft/go-winio v0.6.2 github.com/acarl005/stripansi v0.0.0-20180116102854-5a71ef0e047d github.com/buger/goterm v1.0.4 - github.com/compose-spec/compose-go/v2 v2.4.9-0.20250302154753-e508c724a35f + github.com/compose-spec/compose-go/v2 v2.4.9-0.20250306145913-fe089b54fd40 github.com/containerd/containerd/v2 v2.0.2 github.com/containerd/platforms v1.0.0-rc.1 github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc diff --git a/go.sum b/go.sum index 87ce0cd4ada..cff7ee06e15 100644 --- a/go.sum +++ b/go.sum @@ -81,8 +81,8 @@ github.com/cloudflare/cfssl v0.0.0-20180223231731-4e2dcbde5004 h1:lkAMpLVBDaj17e github.com/cloudflare/cfssl v0.0.0-20180223231731-4e2dcbde5004/go.mod h1:yMWuSON2oQp+43nFtAV/uvKQIFpSPerB57DCt9t8sSA= github.com/codahale/rfc6979 v0.0.0-20141003034818-6a90f24967eb h1:EDmT6Q9Zs+SbUoc7Ik9EfrFqcylYqgPZ9ANSbTAntnE= github.com/codahale/rfc6979 v0.0.0-20141003034818-6a90f24967eb/go.mod h1:ZjrT6AXHbDs86ZSdt/osfBi5qfexBrKUdONk989Wnk4= -github.com/compose-spec/compose-go/v2 v2.4.9-0.20250302154753-e508c724a35f h1:kbmTPhf7d9kTnmH0ghAQTqxs1zenKnwKczJlC4z5WSc= -github.com/compose-spec/compose-go/v2 v2.4.9-0.20250302154753-e508c724a35f/go.mod h1:6k5l/0TxCg0/2uLEhRVEsoBWBprS2uvZi32J7xub3lo= +github.com/compose-spec/compose-go/v2 v2.4.9-0.20250306145913-fe089b54fd40 h1:E5PsMWIAP7zG2BhIeznOu6U0S3fE7NjPpiVjk8M8cR0= +github.com/compose-spec/compose-go/v2 v2.4.9-0.20250306145913-fe089b54fd40/go.mod h1:6k5l/0TxCg0/2uLEhRVEsoBWBprS2uvZi32J7xub3lo= github.com/containerd/cgroups/v3 v3.0.5 h1:44na7Ud+VwyE7LIoJ8JTNQOa549a8543BmzaJHo6Bzo= github.com/containerd/cgroups/v3 v3.0.5/go.mod h1:SA5DLYnXO8pTGYiAHXz94qvLQTKfVM5GEVisn4jpins= github.com/containerd/console v1.0.4 h1:F2g4+oChYvBTsASRTz8NP6iIAi97J3TtSAsLbIFn4ro= diff --git a/pkg/e2e/env_file_test.go b/pkg/e2e/env_file_test.go index 5b546764218..ed7c84318db 100644 --- a/pkg/e2e/env_file_test.go +++ b/pkg/e2e/env_file_test.go @@ -30,3 +30,10 @@ func TestRawEnvFile(t *testing.T) { res := c.RunDockerComposeCmd(t, "-f", "./fixtures/dotenv/raw.yaml", "run", "test") assert.Equal(t, strings.TrimSpace(res.Stdout()), "'{\"key\": \"value\"}'") } + +func TestUnusedMissingEnvFile(t *testing.T) { + c := NewParallelCLI(t) + defer c.cleanupWithDown(t, "unused_dotenv") + + c.RunDockerComposeCmd(t, "-f", "./fixtures/env_file/compose.yaml", "up", "-d", "serviceA") +} diff --git a/pkg/e2e/fixtures/env_file/compose.yaml b/pkg/e2e/fixtures/env_file/compose.yaml new file mode 100644 index 00000000000..07d5dfeb6f7 --- /dev/null +++ b/pkg/e2e/fixtures/env_file/compose.yaml @@ -0,0 +1,8 @@ +services: + serviceA: + image: nginx:latest + + serviceB: + image: nginx:latest + env_file: + - /doesnotexist/.env \ No newline at end of file