Do not strip "v" prefix from version when printing

I noticed this when building the binary; `internal.Version` is set to `v2.0.0-beta.4`,
to match the tag.

```bash
GIT_TAG=v2.0.0-beta.4
make COMPOSE_BINARY=bin/docker-compose -f builder.Makefile compose-plugin \
    GOOS=linux \
    GOARCH=amd64 \
    CGO_ENABLED=0 \
    go build \
        -trimpath \
        -ldflags="-s -w -X github.com/docker/compose-cli/internal.Version=v2.0.0-beta.4" \
        -o bin/docker-compose \
        ./cmd
```

However, the binary has the `v` prefix stripped (which caused a check to fail
when packaging):

```bash
/root/rpmbuild/BUILDROOT/docker-compose-plugin-2.0.0.beta.4-0.fc34.x86_64/usr/libexec/docker/cli-plugins/docker-compose docker-cli-plugin-metadata
++ awk '{ gsub(/[",:]/,"")}; $1 == "Version" { print $2 }'
+ ver=2.0.0-beta.4
+ test 2.0.0-beta.4 = v2.0.0-beta.4
FAIL: docker-compose version (2.0.0-beta.4) did not match
```

This also looks inconsistent with other binaries and plugins we ship:

```bash
docker info --format '{{json .ClientInfo.Plugins}}' | jq .
[
  {
    "SchemaVersion": "0.1.0",
    "Vendor": "Docker Inc.",
    "Version": "v0.5.1-docker",
    "ShortDescription": "Build with BuildKit",
    "Name": "buildx",
    "Path": "/usr/libexec/docker/cli-plugins/docker-buildx"
  },
  {
    "SchemaVersion": "0.1.0",
    "Vendor": "Docker Inc.",
    "Version": "2.0.0-beta.4",
    "ShortDescription": "Docker Compose",
    "Name": "compose",
    "Path": "/usr/libexec/docker/cli-plugins/docker-compose"
  },
  {
    "SchemaVersion": "0.1.0",
    "Vendor": "Docker Inc.",
    "Version": "v0.8.0",
    "ShortDescription": "Docker Scan",
    "Name": "scan",
    "Path": "/usr/libexec/docker/cli-plugins/docker-scan"
  }
]
```

Perhaps there was a specific reason for this, but thought I'd open this PR for
discussion (if the v-prefix should not be there, perhaps we should isntead strip
it when setting the version).

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
This commit is contained in:
Sebastiaan van Stijn 2021-07-03 15:50:46 +02:00
parent 8d2ea5feb1
commit a0db32043e
No known key found for this signature in database
GPG Key ID: 76698F39D527CE8C
3 changed files with 6 additions and 11 deletions

View File

@ -57,17 +57,16 @@ func runVersion(cmd *cobra.Command) error {
var versionString string var versionString string
var err error var err error
format := strings.ToLower(strings.ReplaceAll(cmd.Flag(formatOpt).Value.String(), " ", "")) format := strings.ToLower(strings.ReplaceAll(cmd.Flag(formatOpt).Value.String(), " ", ""))
displayedVersion := strings.TrimPrefix(internal.Version, "v")
// Replace is preferred in this case to keep the order. // Replace is preferred in this case to keep the order.
switch format { switch format {
case formatter.PRETTY, "": case formatter.PRETTY, "":
versionString, err = getOutFromMoby(cmd, fixedPrettyArgs(os.Args[1:])...) versionString, err = getOutFromMoby(cmd, fixedPrettyArgs(os.Args[1:])...)
versionString = strings.Replace(versionString, versionString = strings.Replace(versionString,
"\n Version:", "\n Cloud integration: "+displayedVersion+"\n Version:", 1) "\n Version:", "\n Cloud integration: "+internal.Version+"\n Version:", 1)
case formatter.JSON, formatter.TemplateLegacyJSON: // Try to catch full JSON formats case formatter.JSON, formatter.TemplateLegacyJSON: // Try to catch full JSON formats
versionString, err = getOutFromMoby(cmd, fixedJSONArgs(os.Args[1:])...) versionString, err = getOutFromMoby(cmd, fixedJSONArgs(os.Args[1:])...)
versionString = strings.Replace(versionString, versionString = strings.Replace(versionString,
`"Version":`, fmt.Sprintf(`"CloudIntegration":%q,"Version":`, displayedVersion), 1) `"Version":`, fmt.Sprintf(`"CloudIntegration":%q,"Version":`, internal.Version), 1)
default: default:
versionString, err = getOutFromMoby(cmd) versionString, err = getOutFromMoby(cmd)
} }

View File

@ -18,7 +18,6 @@ package compose
import ( import (
"fmt" "fmt"
"strings"
"github.com/spf13/cobra" "github.com/spf13/cobra"
@ -52,14 +51,13 @@ func versionCommand() *cobra.Command {
} }
func runVersion(opts versionOptions) { func runVersion(opts versionOptions) {
displayedVersion := strings.TrimPrefix(internal.Version, "v")
if opts.short { if opts.short {
fmt.Println(displayedVersion) fmt.Println(internal.Version)
return return
} }
if opts.format == formatter.JSON { if opts.format == formatter.JSON {
fmt.Printf(`{"version":"%s"}\n`, displayedVersion) fmt.Printf(`{"version":%q}\n`, internal.Version)
return return
} }
fmt.Printf("Docker Compose version %s\n", displayedVersion) fmt.Println("Docker Compose version", internal.Version)
} }

View File

@ -17,8 +17,6 @@
package main package main
import ( import (
"strings"
dockercli "github.com/docker/cli/cli" dockercli "github.com/docker/cli/cli"
"github.com/docker/cli/cli-plugins/manager" "github.com/docker/cli/cli-plugins/manager"
"github.com/docker/cli/cli-plugins/plugin" "github.com/docker/cli/cli-plugins/plugin"
@ -58,6 +56,6 @@ func main() {
manager.Metadata{ manager.Metadata{
SchemaVersion: "0.1.0", SchemaVersion: "0.1.0",
Vendor: "Docker Inc.", Vendor: "Docker Inc.",
Version: strings.TrimPrefix(internal.Version, "v"), Version: internal.Version,
}) })
} }