diff --git a/cli/cmd/metadata.go b/cli/cmd/metadata.go new file mode 100644 index 000000000..8b4867b1e --- /dev/null +++ b/cli/cmd/metadata.go @@ -0,0 +1,57 @@ +/* + 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 cmd + +import ( + "encoding/json" + "fmt" + + "github.com/spf13/cobra" + + "github.com/docker/compose-cli/internal" +) + +// BackendMetadata backend metadata +// TODO import this from cli when merged & available in /docker/cli +type BackendMetadata struct { + Name string + Version string +} + +// MetadataCommand command to display version +func MetadataCommand() *cobra.Command { + cmd := &cobra.Command{ + Use: "backend-metadata", + Short: "return CLI backend metadata", + Args: cobra.MaximumNArgs(0), + Hidden: true, + RunE: func(cmd *cobra.Command, _ []string) error { + metadata := BackendMetadata{ + Name: "Cloud integration", + Version: internal.Version, + } + jsonMeta, err := json.Marshal(metadata) + if err != nil { + return err + } + fmt.Println(string(jsonMeta)) + return nil + }, + } + + return cmd +} diff --git a/cli/main.go b/cli/main.go index 026af7b9f..446d50469 100644 --- a/cli/main.go +++ b/cli/main.go @@ -57,12 +57,13 @@ import ( var ( contextAgnosticCommands = map[string]struct{}{ - "compose": {}, - "context": {}, - "login": {}, - "logout": {}, - "serve": {}, - "version": {}, + "compose": {}, + "context": {}, + "login": {}, + "logout": {}, + "serve": {}, + "version": {}, + "backend-metadata": {}, } unknownCommandRegexp = regexp.MustCompile(`unknown command "([^"]*)"`) ) @@ -132,6 +133,7 @@ func main() { cmd.KillCommand(), cmd.SecretCommand(), cmd.PruneCommand(), + cmd.MetadataCommand(), // Place holders cmd.EcsCommand(), diff --git a/tests/e2e/e2e_test.go b/tests/e2e/e2e_test.go index 9e61638a2..6dc585d65 100644 --- a/tests/e2e/e2e_test.go +++ b/tests/e2e/e2e_test.go @@ -467,6 +467,15 @@ func TestUnsupportedCommand(t *testing.T) { }) } +func TestBackendMetadata(t *testing.T) { + c := NewParallelE2eCLI(t, binDir) + + t.Run("backend-metadata", func(t *testing.T) { + res := c.RunDockerCmd("backend-metadata") + res.Assert(t, icmd.Expected{Out: `{"Name":"Cloud integration","Version":"`}) + }) +} + func TestVersion(t *testing.T) { c := NewParallelE2eCLI(t, binDir)