Signed-off-by: John Howard <jhoward@microsoft.com>
| ... | ... |
@@ -23,17 +23,21 @@ func (cli *DockerCli) CmdVersion(args ...string) error {
|
| 23 | 23 |
|
| 24 | 24 |
cmd.ParseFlags(args, true) |
| 25 | 25 |
|
| 26 |
+ fmt.Println("Client:")
|
|
| 26 | 27 |
if dockerversion.VERSION != "" {
|
| 27 |
- fmt.Fprintf(cli.out, "Client version: %s\n", dockerversion.VERSION) |
|
| 28 |
+ fmt.Fprintf(cli.out, " Version: %s\n", dockerversion.VERSION) |
|
| 28 | 29 |
} |
| 29 |
- fmt.Fprintf(cli.out, "Client API version: %s\n", api.Version) |
|
| 30 |
- fmt.Fprintf(cli.out, "Go version (client): %s\n", runtime.Version()) |
|
| 30 |
+ fmt.Fprintf(cli.out, " API version: %s\n", api.Version) |
|
| 31 |
+ fmt.Fprintf(cli.out, " Go version: %s\n", runtime.Version()) |
|
| 31 | 32 |
if dockerversion.GITCOMMIT != "" {
|
| 32 |
- fmt.Fprintf(cli.out, "Git commit (client): %s\n", dockerversion.GITCOMMIT) |
|
| 33 |
+ fmt.Fprintf(cli.out, " Git commit: %s\n", dockerversion.GITCOMMIT) |
|
| 33 | 34 |
} |
| 34 |
- fmt.Fprintf(cli.out, "OS/Arch (client): %s/%s\n", runtime.GOOS, runtime.GOARCH) |
|
| 35 |
+ if dockerversion.BUILDTIME != "" {
|
|
| 36 |
+ fmt.Fprintf(cli.out, " Built: %s\n", dockerversion.BUILDTIME) |
|
| 37 |
+ } |
|
| 38 |
+ fmt.Fprintf(cli.out, " OS/Arch: %s/%s\n", runtime.GOOS, runtime.GOARCH) |
|
| 35 | 39 |
if utils.ExperimentalBuild() {
|
| 36 |
- fmt.Fprintf(cli.out, "Experimental (client): true\n") |
|
| 40 |
+ fmt.Fprintf(cli.out, " Experimental: true\n") |
|
| 37 | 41 |
} |
| 38 | 42 |
|
| 39 | 43 |
stream, _, _, err := cli.call("GET", "/version", nil, nil)
|
| ... | ... |
@@ -47,15 +51,20 @@ func (cli *DockerCli) CmdVersion(args ...string) error {
|
| 47 | 47 |
return err |
| 48 | 48 |
} |
| 49 | 49 |
|
| 50 |
- fmt.Fprintf(cli.out, "Server version: %s\n", v.Version) |
|
| 50 |
+ fmt.Println("\nServer:")
|
|
| 51 |
+ fmt.Fprintf(cli.out, " Version: %s\n", v.Version) |
|
| 51 | 52 |
if v.ApiVersion != "" {
|
| 52 |
- fmt.Fprintf(cli.out, "Server API version: %s\n", v.ApiVersion) |
|
| 53 |
+ fmt.Fprintf(cli.out, " API version: %s\n", v.ApiVersion) |
|
| 54 |
+ } |
|
| 55 |
+ fmt.Fprintf(cli.out, " Go version: %s\n", v.GoVersion) |
|
| 56 |
+ fmt.Fprintf(cli.out, " Git commit: %s\n", v.GitCommit) |
|
| 57 |
+ if len(v.BuildTime) > 0 {
|
|
| 58 |
+ fmt.Fprintf(cli.out, " Built: %s\n", v.BuildTime) |
|
| 53 | 59 |
} |
| 54 |
- fmt.Fprintf(cli.out, "Go version (server): %s\n", v.GoVersion) |
|
| 55 |
- fmt.Fprintf(cli.out, "Git commit (server): %s\n", v.GitCommit) |
|
| 56 |
- fmt.Fprintf(cli.out, "OS/Arch (server): %s/%s\n", v.Os, v.Arch) |
|
| 60 |
+ fmt.Fprintf(cli.out, " OS/Arch: %s/%s\n", v.Os, v.Arch) |
|
| 57 | 61 |
if v.Experimental {
|
| 58 |
- fmt.Fprintf(cli.out, "Experimental (server): true\n") |
|
| 62 |
+ fmt.Fprintf(cli.out, " Experimental: true\n") |
|
| 59 | 63 |
} |
| 64 |
+ fmt.Fprintf(cli.out, "\n") |
|
| 60 | 65 |
return nil |
| 61 | 66 |
} |
| ... | ... |
@@ -249,6 +249,7 @@ func (s *Server) getVersion(version version.Version, w http.ResponseWriter, r *h |
| 249 | 249 |
GoVersion: runtime.Version(), |
| 250 | 250 |
Os: runtime.GOOS, |
| 251 | 251 |
Arch: runtime.GOARCH, |
| 252 |
+ BuildTime: dockerversion.BUILDTIME, |
|
| 252 | 253 |
} |
| 253 | 254 |
|
| 254 | 255 |
if version.GreaterThanOrEqualTo("1.19") {
|
| ... | ... |
@@ -71,6 +71,7 @@ if command -v git &> /dev/null && git rev-parse &> /dev/null; then |
| 71 | 71 |
if [ -n "$(git status --porcelain --untracked-files=no)" ]; then |
| 72 | 72 |
GITCOMMIT="$GITCOMMIT-dirty" |
| 73 | 73 |
fi |
| 74 |
+ BUILDTIME=$(date -u) |
|
| 74 | 75 |
elif [ "$DOCKER_GITCOMMIT" ]; then |
| 75 | 76 |
GITCOMMIT="$DOCKER_GITCOMMIT" |
| 76 | 77 |
else |
| ... | ... |
@@ -15,23 +15,20 @@ func (s *DockerSuite) TestVersionEnsureSucceeds(c *check.C) {
|
| 15 | 15 |
c.Fatalf("failed to execute docker version: %s, %v", out, err)
|
| 16 | 16 |
} |
| 17 | 17 |
|
| 18 |
- stringsToCheck := []string{
|
|
| 19 |
- "Client version:", |
|
| 20 |
- "Client API version:", |
|
| 21 |
- "Go version (client):", |
|
| 22 |
- "Git commit (client):", |
|
| 23 |
- "OS/Arch (client):", |
|
| 24 |
- "Server version:", |
|
| 25 |
- "Server API version:", |
|
| 26 |
- "Go version (server):", |
|
| 27 |
- "Git commit (server):", |
|
| 28 |
- "OS/Arch (server):", |
|
| 18 |
+ stringsToCheck := map[string]int{
|
|
| 19 |
+ "Client:": 1, |
|
| 20 |
+ "Server:": 1, |
|
| 21 |
+ " Version:": 2, |
|
| 22 |
+ " API version:": 2, |
|
| 23 |
+ " Go version:": 2, |
|
| 24 |
+ " Git commit:": 2, |
|
| 25 |
+ " OS/Arch:": 2, |
|
| 26 |
+ " Built:": 2, |
|
| 29 | 27 |
} |
| 30 | 28 |
|
| 31 |
- for _, linePrefix := range stringsToCheck {
|
|
| 32 |
- if !strings.Contains(out, linePrefix) {
|
|
| 33 |
- c.Errorf("couldn't find string %v in output", linePrefix)
|
|
| 29 |
+ for k, v := range stringsToCheck {
|
|
| 30 |
+ if strings.Count(out, k) != v {
|
|
| 31 |
+ c.Errorf("%v expected %d instances found %d", k, v, strings.Count(out, k))
|
|
| 34 | 32 |
} |
| 35 | 33 |
} |
| 36 |
- |
|
| 37 | 34 |
} |