enrich versioning with build deps (#7848)
`version --long` output now shows the list of build dependencies. Redirect version's output to `stdout`.
This commit is contained in:
parent
70fa17b55a
commit
e172a08333
2
go.sum
2
go.sum
|
@ -595,8 +595,6 @@ github.com/tendermint/crypto v0.0.0-20191022145703-50d29ede1e15/go.mod h1:z4YtwM
|
||||||
github.com/tendermint/go-amino v0.16.0 h1:GyhmgQKvqF82e2oZeuMSp9JTN0N09emoSZlb2lyGa2E=
|
github.com/tendermint/go-amino v0.16.0 h1:GyhmgQKvqF82e2oZeuMSp9JTN0N09emoSZlb2lyGa2E=
|
||||||
github.com/tendermint/go-amino v0.16.0/go.mod h1:TQU0M1i/ImAo+tYpZi73AU3V/dKeCoMC9Sphe2ZwGME=
|
github.com/tendermint/go-amino v0.16.0/go.mod h1:TQU0M1i/ImAo+tYpZi73AU3V/dKeCoMC9Sphe2ZwGME=
|
||||||
github.com/tendermint/tendermint v0.34.0-rc4/go.mod h1:yotsojf2C1QBOw4dZrTcxbyxmPUrT4hNuOQWX9XUwB4=
|
github.com/tendermint/tendermint v0.34.0-rc4/go.mod h1:yotsojf2C1QBOw4dZrTcxbyxmPUrT4hNuOQWX9XUwB4=
|
||||||
github.com/tendermint/tendermint v0.34.0-rc5 h1:2bnQfWyOMfTCbol5pwB8CgM2nxi6/Kz6zqlS6Udm/Cg=
|
|
||||||
github.com/tendermint/tendermint v0.34.0-rc5/go.mod h1:yotsojf2C1QBOw4dZrTcxbyxmPUrT4hNuOQWX9XUwB4=
|
|
||||||
github.com/tendermint/tendermint v0.34.0-rc6 h1:SVuKGvvE22KxfuK8QUHctUrmOWJsncZSYXIYtcnoKN0=
|
github.com/tendermint/tendermint v0.34.0-rc6 h1:SVuKGvvE22KxfuK8QUHctUrmOWJsncZSYXIYtcnoKN0=
|
||||||
github.com/tendermint/tendermint v0.34.0-rc6/go.mod h1:ugzyZO5foutZImv0Iyx/gOFCX6mjJTgbLHTwi17VDVg=
|
github.com/tendermint/tendermint v0.34.0-rc6/go.mod h1:ugzyZO5foutZImv0Iyx/gOFCX6mjJTgbLHTwi17VDVg=
|
||||||
github.com/tendermint/tm-db v0.6.2 h1:DOn8jwCdjJblrCFJbtonEIPD1IuJWpbRUUdR8GWE4RM=
|
github.com/tendermint/tm-db v0.6.2 h1:DOn8jwCdjJblrCFJbtonEIPD1IuJWpbRUUdR8GWE4RM=
|
||||||
|
|
|
@ -17,6 +17,7 @@ func NewVersionCommand() *cobra.Command {
|
||||||
Short: "Print the application binary version information",
|
Short: "Print the application binary version information",
|
||||||
RunE: func(cmd *cobra.Command, _ []string) error {
|
RunE: func(cmd *cobra.Command, _ []string) error {
|
||||||
verInfo := NewInfo()
|
verInfo := NewInfo()
|
||||||
|
cmd.SetOut(cmd.OutOrStdout())
|
||||||
|
|
||||||
if long, _ := cmd.Flags().GetBool(flagLong); !long {
|
if long, _ := cmd.Flags().GetBool(flagLong); !long {
|
||||||
cmd.Println(verInfo.Version)
|
cmd.Println(verInfo.Version)
|
||||||
|
|
|
@ -17,8 +17,10 @@
|
||||||
package version
|
package version
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
"runtime"
|
"runtime"
|
||||||
|
"runtime/debug"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
@ -36,12 +38,13 @@ var (
|
||||||
|
|
||||||
// Info defines the application version information.
|
// Info defines the application version information.
|
||||||
type Info struct {
|
type Info struct {
|
||||||
Name string `json:"name" yaml:"name"`
|
Name string `json:"name" yaml:"name"`
|
||||||
AppName string `json:"server_name" yaml:"server_name"`
|
AppName string `json:"server_name" yaml:"server_name"`
|
||||||
Version string `json:"version" yaml:"version"`
|
Version string `json:"version" yaml:"version"`
|
||||||
GitCommit string `json:"commit" yaml:"commit"`
|
GitCommit string `json:"commit" yaml:"commit"`
|
||||||
BuildTags string `json:"build_tags" yaml:"build_tags"`
|
BuildTags string `json:"build_tags" yaml:"build_tags"`
|
||||||
GoVersion string `json:"go" yaml:"go"`
|
GoVersion string `json:"go" yaml:"go"`
|
||||||
|
BuildDeps []buildDep `json:"build_deps" yaml:"build_deps"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewInfo() Info {
|
func NewInfo() Info {
|
||||||
|
@ -52,6 +55,7 @@ func NewInfo() Info {
|
||||||
GitCommit: Commit,
|
GitCommit: Commit,
|
||||||
BuildTags: BuildTags,
|
BuildTags: BuildTags,
|
||||||
GoVersion: fmt.Sprintf("go version %s %s/%s", runtime.Version(), runtime.GOOS, runtime.GOARCH),
|
GoVersion: fmt.Sprintf("go version %s %s/%s", runtime.Version(), runtime.GOOS, runtime.GOARCH),
|
||||||
|
BuildDeps: depsFromBuildInfo(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -63,3 +67,24 @@ build tags: %s
|
||||||
vi.Name, vi.Version, vi.GitCommit, vi.BuildTags, vi.GoVersion,
|
vi.Name, vi.Version, vi.GitCommit, vi.BuildTags, vi.GoVersion,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func depsFromBuildInfo() (deps []buildDep) {
|
||||||
|
buildInfo, ok := debug.ReadBuildInfo()
|
||||||
|
if !ok {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, dep := range buildInfo.Deps {
|
||||||
|
deps = append(deps, buildDep{dep})
|
||||||
|
}
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
type buildDep struct {
|
||||||
|
*debug.Module
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d buildDep) String() string { return fmt.Sprintf("%s@%s", d.Path, d.Version) }
|
||||||
|
func (d buildDep) MarshalJSON() ([]byte, error) { return json.Marshal(d.String()) }
|
||||||
|
func (d buildDep) MarshalYAML() (interface{}, error) { return d.String(), nil }
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
package version
|
package version_test
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
|
@ -11,10 +11,11 @@ import (
|
||||||
"github.com/tendermint/tendermint/libs/cli"
|
"github.com/tendermint/tendermint/libs/cli"
|
||||||
|
|
||||||
"github.com/cosmos/cosmos-sdk/testutil"
|
"github.com/cosmos/cosmos-sdk/testutil"
|
||||||
|
"github.com/cosmos/cosmos-sdk/version"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestNewInfo(t *testing.T) {
|
func TestNewInfo(t *testing.T) {
|
||||||
info := NewInfo()
|
info := version.NewInfo()
|
||||||
want := fmt.Sprintf(`:
|
want := fmt.Sprintf(`:
|
||||||
git commit:
|
git commit:
|
||||||
build tags:
|
build tags:
|
||||||
|
@ -23,7 +24,7 @@ build tags:
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestInfo_String(t *testing.T) {
|
func TestInfo_String(t *testing.T) {
|
||||||
info := Info{
|
info := version.Info{
|
||||||
Name: "testapp",
|
Name: "testapp",
|
||||||
AppName: "testappd",
|
AppName: "testappd",
|
||||||
Version: "1.0.0",
|
Version: "1.0.0",
|
||||||
|
@ -39,12 +40,12 @@ go version go1.14 linux/amd64`
|
||||||
}
|
}
|
||||||
|
|
||||||
func Test_runVersionCmd(t *testing.T) {
|
func Test_runVersionCmd(t *testing.T) {
|
||||||
cmd := NewVersionCommand()
|
cmd := version.NewVersionCommand()
|
||||||
_, mockOut := testutil.ApplyMockIO(cmd)
|
_, mockOut := testutil.ApplyMockIO(cmd)
|
||||||
|
|
||||||
cmd.SetArgs([]string{
|
cmd.SetArgs([]string{
|
||||||
fmt.Sprintf("--%s=''", cli.OutputFlag),
|
fmt.Sprintf("--%s=''", cli.OutputFlag),
|
||||||
fmt.Sprintf("--%s=false", flagLong),
|
"--long=false",
|
||||||
})
|
})
|
||||||
|
|
||||||
require.NoError(t, cmd.Execute())
|
require.NoError(t, cmd.Execute())
|
||||||
|
@ -52,11 +53,10 @@ func Test_runVersionCmd(t *testing.T) {
|
||||||
mockOut.Reset()
|
mockOut.Reset()
|
||||||
|
|
||||||
cmd.SetArgs([]string{
|
cmd.SetArgs([]string{
|
||||||
fmt.Sprintf("--%s=json", cli.OutputFlag),
|
fmt.Sprintf("--%s=json", cli.OutputFlag), "--long=true",
|
||||||
fmt.Sprintf("--%s=true", flagLong),
|
|
||||||
})
|
})
|
||||||
|
|
||||||
info := NewInfo()
|
info := version.NewInfo()
|
||||||
stringInfo, err := json.Marshal(info)
|
stringInfo, err := json.Marshal(info)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.NoError(t, cmd.Execute())
|
require.NoError(t, cmd.Execute())
|
||||||
|
|
Loading…
Reference in New Issue