diff --git a/cmd/compose/config.go b/cmd/compose/config.go index b06e620b116..23625b146b2 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 00000000000..aa183ea6c8c --- /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 00000000000..634f521b23b --- /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