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.PersistentFlags().BoolVar(&root.debug, "debug", false, "Enable debug mode")
cmd.AddCommand( cmd.AddCommand(

View File

@ -28,7 +28,7 @@ func TestRootCmdVersion(t *testing.T) {
cmd.SetOut(&b) cmd.SetOut(&b)
cmd.SetArgs([]string{"-v"}) cmd.SetArgs([]string{"-v"})
require.NoError(t, cmd.Execute()) 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) 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/env/v8 v8.0.0
github.com/caarlos0/go-reddit/v3 v3.0.1 github.com/caarlos0/go-reddit/v3 v3.0.1
github.com/caarlos0/go-shellwords v1.0.12 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/caarlos0/log v0.2.2
github.com/charmbracelet/keygen v0.4.2 github.com/charmbracelet/keygen v0.4.2
github.com/charmbracelet/lipgloss v0.7.1 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-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 h1:HWrUnu6lGbWfrDcFiHcZiwOLzHWjjrPVehULaTFgPp8=
github.com/caarlos0/go-shellwords v1.0.12/go.mod h1:bYeeX1GrTLPl5cAMYEzdm272qdsQAZiaHgeF0KTk1Gw= 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 h1:Rier7889+dTKHjvwf0cMNu8DjMF+/wCYC7wrPj9fXFk=
github.com/caarlos0/log v0.2.2/go.mod h1:IbSeDN+hKHdOwE6t2z9i2rcraz+r6N1XZkRHE4BAKm0= 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= github.com/caarlos0/sshmarshal v0.1.0 h1:zTCZrDORFfWh526Tsb7vCm3+Yg/SfW/Ub8aQDeosk0I=

50
main.go
View File

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

View File

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