From bc5fc6ba7e8187618edb6421f15e6574400730a9 Mon Sep 17 00:00:00 2001 From: Nicolas De Loof Date: Mon, 18 Mar 2024 08:08:20 +0100 Subject: [PATCH] fix `compose config --format json` Signed-off-by: Nicolas De Loof --- cmd/compose/config.go | 10 +++++- pkg/e2e/config_test.go | 49 ++++++++++++++++++++++++++++ pkg/e2e/fixtures/config/compose.yaml | 5 +++ 3 files changed, 63 insertions(+), 1 deletion(-) create mode 100644 pkg/e2e/config_test.go create mode 100644 pkg/e2e/fixtures/config/compose.yaml diff --git a/cmd/compose/config.go b/cmd/compose/config.go index b06e620b11..23625b146b 100644 --- a/cmd/compose/config.go +++ b/cmd/compose/config.go @@ -160,7 +160,15 @@ func runConfig(ctx context.Context, dockerCli command.Cli, opts configOptions, s if err != nil { return err } - content, err = project.MarshalYAML() + + switch opts.Format { + case "json": + content, err = project.MarshalJSON() + case "yaml": + content, err = project.MarshalYAML() + default: + return fmt.Errorf("unsupported format %q", opts.Format) + } if err != nil { return err } diff --git a/pkg/e2e/config_test.go b/pkg/e2e/config_test.go new file mode 100644 index 0000000000..aa183ea6c8 --- /dev/null +++ b/pkg/e2e/config_test.go @@ -0,0 +1,49 @@ +/* + Copyright 2020 Docker Compose CLI authors + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +package e2e + +import ( + "testing" + + "gotest.tools/v3/icmd" +) + +func TestLocalComposeConfig(t *testing.T) { + c := NewParallelCLI(t) + + const projectName = "compose-e2e-config" + + t.Run("yaml", func(t *testing.T) { + res := c.RunDockerComposeCmd(t, "-f", "./fixtures/config/compose.yaml", "--project-name", projectName, "config") + res.Assert(t, icmd.Expected{Out: ` + ports: + - mode: ingress + target: 80 + published: "8080" + protocol: tcp`}) + }) + + t.Run("json", func(t *testing.T) { + res := c.RunDockerComposeCmd(t, "-f", "./fixtures/config/compose.yaml", "--project-name", projectName, "config", "--format", "json") + res.Assert(t, icmd.Expected{Out: `ports":[{"mode":"ingress","target":80,"published":"8080","protocol":"tcp"}]`}) + }) + + t.Run("--no-interpolate", func(t *testing.T) { + res := c.RunDockerComposeCmd(t, "-f", "./fixtures/config/compose.yaml", "--project-name", projectName, "config", "--no-interpolate") + res.Assert(t, icmd.Expected{Out: `- ${PORT:-8080}:80`}) + }) +} diff --git a/pkg/e2e/fixtures/config/compose.yaml b/pkg/e2e/fixtures/config/compose.yaml new file mode 100644 index 0000000000..634f521b23 --- /dev/null +++ b/pkg/e2e/fixtures/config/compose.yaml @@ -0,0 +1,5 @@ +services: + test: + image: test + ports: + - ${PORT:-8080}:80 \ No newline at end of file