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:
parent
b36e913eda
commit
9aeea7b430
5
art.txt
Normal file
5
art.txt
Normal file
@ -0,0 +1,5 @@
|
||||
____ ____ _
|
||||
/ ___| ___ | _ \ ___| | ___ __ _ ___ ___ _ __
|
||||
| | _ / _ \| |_) / _ \ |/ _ \/ _` / __|/ _ \ '__|
|
||||
| |_| | (_) | _ < __/ | __/ (_| \__ \ __/ |
|
||||
\____|\___/|_| \_\___|_|\___|\__,_|___/\___|_|
|
@ -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(
|
||||
|
@ -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
1
go.mod
@ -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
2
go.sum
@ -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
50
main.go
@ -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
|
||||
}
|
||||
},
|
||||
)
|
||||
}
|
||||
|
19
main_test.go
19
main_test.go
@ -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))
|
||||
})
|
||||
}
|
||||
}
|
||||
|
11
testdata/TestVersion/all_empty.json.golden
vendored
Normal file
11
testdata/TestVersion/all_empty.json.golden
vendored
Normal 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"
|
||||
}
|
11
testdata/TestVersion/complete.json.golden
vendored
Normal file
11
testdata/TestVersion/complete.json.golden
vendored
Normal 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"
|
||||
}
|
11
testdata/TestVersion/only_version.json.golden
vendored
Normal file
11
testdata/TestVersion/only_version.json.golden
vendored
Normal 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"
|
||||
}
|
11
testdata/TestVersion/version,_date,_built_by.json.golden
vendored
Normal file
11
testdata/TestVersion/version,_date,_built_by.json.golden
vendored
Normal 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"
|
||||
}
|
11
testdata/TestVersion/version_and_date.json.golden
vendored
Normal file
11
testdata/TestVersion/version_and_date.json.golden
vendored
Normal 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"
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user