1
0
mirror of https://github.com/goreleaser/goreleaser.git synced 2025-02-03 13:11:48 +02:00

feat: new --version output (#3962)

using the same output as most cloud-native Go-written CLI's use, i.e.
using
[sigs.k8s.io/release-utils](https://github.com/kubernetes-sigs/release-utils).

---------

Signed-off-by: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>
This commit is contained in:
Carlos Alexandro Becker 2023-04-30 14:19:55 -03:00 committed by GitHub
parent b36e913eda
commit 9aeea7b430
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
12 changed files with 100 additions and 35 deletions

5
art.txt Normal file
View File

@ -0,0 +1,5 @@
____ ____ _
/ ___| ___ | _ \ ___| | ___ __ _ ___ ___ _ __
| | _ / _ \| |_) / _ \ |/ _ \/ _` / __|/ _ \ '__|
| |_| | (_) | _ < __/ | __/ (_| \__ \ __/ |
\____|\___/|_| \_\___|_|\___|\__,_|___/\___|_|

View File

@ -76,6 +76,7 @@ Check out our website for more information, examples and documentation: https://
}
},
}
cmd.SetVersionTemplate("{{.Version}}")
cmd.PersistentFlags().BoolVar(&root.debug, "debug", false, "Enable debug mode")
cmd.AddCommand(

View File

@ -28,7 +28,7 @@ func TestRootCmdVersion(t *testing.T) {
cmd.SetOut(&b)
cmd.SetArgs([]string{"-v"})
require.NoError(t, cmd.Execute())
require.Equal(t, "goreleaser version 1.2.3\n", b.String())
require.Equal(t, "1.2.3", b.String())
require.Equal(t, 0, mem.code)
}

1
go.mod
View File

@ -11,6 +11,7 @@ require (
github.com/caarlos0/env/v8 v8.0.0
github.com/caarlos0/go-reddit/v3 v3.0.1
github.com/caarlos0/go-shellwords v1.0.12
github.com/caarlos0/go-version v0.1.1
github.com/caarlos0/log v0.2.2
github.com/charmbracelet/keygen v0.4.2
github.com/charmbracelet/lipgloss v0.7.1

2
go.sum
View File

@ -702,6 +702,8 @@ github.com/caarlos0/go-reddit/v3 v3.0.1/go.mod h1:QlwgmG5SAqxMeQvg/A2dD1x9cIZCO5
github.com/caarlos0/go-rpmutils v0.2.1-0.20211112020245-2cd62ff89b11 h1:IRrDwVlWQr6kS1U8/EtyA1+EHcc4yl8pndcqXWrEamg=
github.com/caarlos0/go-shellwords v1.0.12 h1:HWrUnu6lGbWfrDcFiHcZiwOLzHWjjrPVehULaTFgPp8=
github.com/caarlos0/go-shellwords v1.0.12/go.mod h1:bYeeX1GrTLPl5cAMYEzdm272qdsQAZiaHgeF0KTk1Gw=
github.com/caarlos0/go-version v0.1.1 h1:1bikKHkGGVIIxqCmufhSSs3hpBScgHGacrvsi8FuIfc=
github.com/caarlos0/go-version v0.1.1/go.mod h1:Ze5Qx4TsBBi5FyrSKVg1Ibc44KGV/llAaKGp86oTwZ0=
github.com/caarlos0/log v0.2.2 h1:Rier7889+dTKHjvwf0cMNu8DjMF+/wCYC7wrPj9fXFk=
github.com/caarlos0/log v0.2.2/go.mod h1:IbSeDN+hKHdOwE6t2z9i2rcraz+r6N1XZkRHE4BAKm0=
github.com/caarlos0/sshmarshal v0.1.0 h1:zTCZrDORFfWh526Tsb7vCm3+Yg/SfW/Ub8aQDeosk0I=

50
main.go
View File

@ -1,11 +1,11 @@
package main
import (
"fmt"
"os"
"runtime"
"runtime/debug"
_ "embed"
goversion "github.com/caarlos0/go-version"
"github.com/caarlos0/log"
"github.com/charmbracelet/lipgloss"
"github.com/goreleaser/goreleaser/cmd"
@ -15,7 +15,7 @@ import (
// nolint: gochecknoglobals
var (
version = "dev"
version = ""
commit = ""
date = ""
builtBy = ""
@ -36,28 +36,34 @@ func init() {
func main() {
cmd.Execute(
buildVersion(version, commit, date, builtBy),
buildVersion(version, commit, date, builtBy).String(),
os.Exit,
os.Args[1:],
)
}
const website = "\n\nhttps://goreleaser.com"
const website = "https://goreleaser.com"
func buildVersion(version, commit, date, builtBy string) string {
result := version
if commit != "" {
result = fmt.Sprintf("%s\ncommit: %s", result, commit)
}
if date != "" {
result = fmt.Sprintf("%s\nbuilt at: %s", result, date)
}
if builtBy != "" {
result = fmt.Sprintf("%s\nbuilt by: %s", result, builtBy)
}
result = fmt.Sprintf("%s\ngoos: %s\ngoarch: %s", result, runtime.GOOS, runtime.GOARCH)
if info, ok := debug.ReadBuildInfo(); ok && info.Main.Sum != "" {
result = fmt.Sprintf("%s\nmodule version: %s, checksum: %s", result, info.Main.Version, info.Main.Sum)
}
return result + website
//go:embed art.txt
var asciiArt string
func buildVersion(version, commit, date, builtBy string) goversion.Info {
return goversion.GetVersionInfo(
goversion.WithAppDetails("goreleaser", "Deliver Go Binaries as fast and easily as possible", website),
goversion.WithASCIIName(asciiArt),
func(i *goversion.Info) {
if commit != "" {
i.GitCommit = commit
}
if date != "" {
i.BuildDate = date
}
if version != "" {
i.GitVersion = version
}
if builtBy != "" {
i.BuiltBy = builtBy
}
},
)
}

View File

@ -1,48 +1,43 @@
package main
import (
"fmt"
"runtime"
"testing"
"github.com/goreleaser/goreleaser/internal/golden"
"github.com/stretchr/testify/require"
)
func TestVersion(t *testing.T) {
os := fmt.Sprintf("\ngoos: %s\ngoarch: %s", runtime.GOOS, runtime.GOARCH)
for name, tt := range map[string]struct {
version, commit, date, builtBy string
out string
}{
"all empty": {
out: os + website,
},
"all empty": {},
"complete": {
version: "1.2.3",
date: "12/12/12",
commit: "aaaa",
builtBy: "me",
out: "1.2.3\ncommit: aaaa\nbuilt at: 12/12/12\nbuilt by: me" + os + website,
},
"only version": {
version: "1.2.3",
out: "1.2.3" + os + website,
},
"version and date": {
version: "1.2.3",
date: "12/12/12",
out: "1.2.3\nbuilt at: 12/12/12" + os + website,
},
"version, date, built by": {
version: "1.2.3",
date: "12/12/12",
builtBy: "me",
out: "1.2.3\nbuilt at: 12/12/12\nbuilt by: me" + os + website,
},
} {
tt := tt
t.Run(name, func(t *testing.T) {
require.Equal(t, tt.out, buildVersion(tt.version, tt.commit, tt.date, tt.builtBy))
v := buildVersion(tt.version, tt.commit, tt.date, tt.builtBy)
out, err := v.JSONString()
require.NoError(t, err)
golden.RequireEqualJSON(t, []byte(out))
})
}
}

View File

@ -0,0 +1,11 @@
{
"gitVersion": "devel",
"moduleCheksum": "unknown",
"gitCommit": "unknown",
"gitTreeState": "unknown",
"buildDate": "unknown",
"builtBy": "unknown",
"goVersion": "go1.20.3",
"compiler": "gc",
"platform": "linux/amd64"
}

View File

@ -0,0 +1,11 @@
{
"gitVersion": "1.2.3",
"moduleCheksum": "unknown",
"gitCommit": "aaaa",
"gitTreeState": "unknown",
"buildDate": "12/12/12",
"builtBy": "me",
"goVersion": "go1.20.3",
"compiler": "gc",
"platform": "linux/amd64"
}

View File

@ -0,0 +1,11 @@
{
"gitVersion": "1.2.3",
"moduleCheksum": "unknown",
"gitCommit": "unknown",
"gitTreeState": "unknown",
"buildDate": "unknown",
"builtBy": "unknown",
"goVersion": "go1.20.3",
"compiler": "gc",
"platform": "linux/amd64"
}

View File

@ -0,0 +1,11 @@
{
"gitVersion": "1.2.3",
"moduleCheksum": "unknown",
"gitCommit": "unknown",
"gitTreeState": "unknown",
"buildDate": "12/12/12",
"builtBy": "me",
"goVersion": "go1.20.3",
"compiler": "gc",
"platform": "linux/amd64"
}

View File

@ -0,0 +1,11 @@
{
"gitVersion": "1.2.3",
"moduleCheksum": "unknown",
"gitCommit": "unknown",
"gitTreeState": "unknown",
"buildDate": "12/12/12",
"builtBy": "unknown",
"goVersion": "go1.20.3",
"compiler": "gc",
"platform": "linux/amd64"
}