Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

internal/version: use gitCommit/gitDate injection in version handling code #25851

Merged
merged 1 commit into from
Sep 23, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions build/ci.go
Original file line number Diff line number Diff line change
Expand Up @@ -254,8 +254,8 @@ func doInstall(cmdline []string) {
func buildFlags(env build.Environment, staticLinking bool, buildTags []string) (flags []string) {
var ld []string
if env.Commit != "" {
ld = append(ld, "-X", "main.gitCommit="+env.Commit)
ld = append(ld, "-X", "main.gitDate="+env.Date)
ld = append(ld, "-X", "github.com/ethereum/go-ethereum/internal/version.gitCommit="+env.Commit)
ld = append(ld, "-X", "github.com/ethereum/go-ethereum/internal/version.gitDate="+env.Date)
}
// Strip DWARF on darwin. This used to be required for certain things,
// and there is no downside to this, so we just keep doing it.
Expand Down
11 changes: 2 additions & 9 deletions cmd/abigen/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,14 +33,6 @@ import (
"github.com/urfave/cli/v2"
)

var (
// Git SHA1 commit hash of the release (set via linker flags)
gitCommit = ""
gitDate = ""

app *cli.App
)

var (
// Flags needed by abigen
abiFlag = &cli.StringFlag{
Expand Down Expand Up @@ -82,8 +74,9 @@ var (
}
)

var app = flags.NewApp("Ethereum ABI wrapper code generator")

func init() {
app = flags.NewApp(gitCommit, gitDate, "ethereum checkpoint helper tool")
app.Name = "abigen"
app.Flags = []cli.Flag{
abiFlag,
Expand Down
9 changes: 1 addition & 8 deletions cmd/checkpoint-admin/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,16 +28,9 @@ import (
"github.com/urfave/cli/v2"
)

var (
// Git SHA1 commit hash of the release (set via linker flags)
gitCommit = ""
gitDate = ""

app *cli.App
)
var app = flags.NewApp("ethereum checkpoint helper tool")

func init() {
app = flags.NewApp(gitCommit, gitDate, "ethereum checkpoint helper tool")
app.Commands = []*cli.Command{
commandStatus,
commandDeploy,
Expand Down
8 changes: 1 addition & 7 deletions cmd/clef/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -215,13 +215,7 @@ The gendoc generates example structures of the json-rpc communication types.
`}
)

var (
// Git SHA1 commit hash of the release (set via linker flags)
gitCommit = ""
gitDate = ""

app = flags.NewApp(gitCommit, gitDate, "Manage Ethereum account operations")
)
var app = flags.NewApp("Manage Ethereum account operations")

func init() {
app.Name = "Clef"
Expand Down
18 changes: 3 additions & 15 deletions cmd/devp2p/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,30 +19,17 @@ package main
import (
"fmt"
"os"
"path/filepath"

"github.com/ethereum/go-ethereum/internal/debug"
"github.com/ethereum/go-ethereum/internal/flags"
"github.com/ethereum/go-ethereum/p2p/enode"
"github.com/ethereum/go-ethereum/params"
"github.com/urfave/cli/v2"
)

var (
// Git information set by linker when building with ci.go.
gitCommit string
gitDate string
app = &cli.App{
Name: filepath.Base(os.Args[0]),
Usage: "go-ethereum devp2p tool",
Version: params.VersionWithCommit(gitCommit, gitDate),
Writer: os.Stdout,
HideVersion: true,
}
)
var app = flags.NewApp("go-ethereum devp2p tool")

func init() {
// Set up the CLI app.
app.HideVersion = true
app.Flags = append(app.Flags, debug.Flags...)
app.Before = func(ctx *cli.Context) error {
flags.MigrateGlobalFlags(ctx)
Expand All @@ -56,6 +43,7 @@ func init() {
fmt.Fprintf(os.Stderr, "No such command: %s\n", cmd)
os.Exit(1)
}

// Add subcommands.
app.Commands = []*cli.Command{
enrdumpCommand,
Expand Down
6 changes: 1 addition & 5 deletions cmd/ethkey/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,14 +28,10 @@ const (
defaultKeyfileName = "keyfile.json"
)

// Git SHA1 commit hash of the release (set via linker flags)
var gitCommit = ""
var gitDate = ""

var app *cli.App

func init() {
app = flags.NewApp(gitCommit, gitDate, "an Ethereum key manager")
app = flags.NewApp("Ethereum key manager")
app.Commands = []*cli.Command{
commandGenerate,
commandInspect,
Expand Down
9 changes: 2 additions & 7 deletions cmd/evm/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,13 +27,6 @@ import (
"github.com/urfave/cli/v2"
)

var (
gitCommit = "" // Git SHA1 commit hash of the release (set via linker flags)
gitDate = ""

app = flags.NewApp(gitCommit, gitDate, "the evm command line interface")
)

var (
DebugFlag = &cli.BoolFlag{
Name: "debug",
Expand Down Expand Up @@ -192,6 +185,8 @@ var blockBuilderCommand = &cli.Command{
},
}

var app = flags.NewApp("the evm command line interface")

func init() {
app.Flags = []cli.Flag{
BenchFlag,
Expand Down
9 changes: 3 additions & 6 deletions cmd/faucet/faucet.go
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ import (
"github.com/ethereum/go-ethereum/eth/ethconfig"
"github.com/ethereum/go-ethereum/ethclient"
"github.com/ethereum/go-ethereum/ethstats"
"github.com/ethereum/go-ethereum/internal/version"
"github.com/ethereum/go-ethereum/les"
"github.com/ethereum/go-ethereum/log"
"github.com/ethereum/go-ethereum/node"
Expand Down Expand Up @@ -93,11 +94,6 @@ var (
ether = new(big.Int).Exp(big.NewInt(10), big.NewInt(18), nil)
)

var (
gitCommit = "" // Git SHA1 commit hash of the release (set via linker flags)
gitDate = "" // Git commit date YYYYMMDD of the release (set via linker flags)
)

//go:embed faucet.html
var websiteTmpl string

Expand Down Expand Up @@ -226,9 +222,10 @@ type wsConn struct {

func newFaucet(genesis *core.Genesis, port int, enodes []*enode.Node, network uint64, stats string, ks *keystore.KeyStore, index []byte) (*faucet, error) {
// Assemble the raw devp2p protocol stack
git, _ := version.VCS()
stack, err := node.New(&node.Config{
Name: "geth",
Version: params.VersionWithCommit(gitCommit, gitDate),
Version: params.VersionWithCommit(git.Commit, git.Date),
DataDir: filepath.Join(os.Getenv("HOME"), ".faucet"),
P2P: p2p.Config{
NAT: nat.Any(),
Expand Down
4 changes: 3 additions & 1 deletion cmd/geth/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ import (
"github.com/ethereum/go-ethereum/eth/ethconfig"
"github.com/ethereum/go-ethereum/internal/ethapi"
"github.com/ethereum/go-ethereum/internal/flags"
"github.com/ethereum/go-ethereum/internal/version"
"github.com/ethereum/go-ethereum/log"
"github.com/ethereum/go-ethereum/metrics"
"github.com/ethereum/go-ethereum/node"
Expand Down Expand Up @@ -108,9 +109,10 @@ func loadConfig(file string, cfg *gethConfig) error {
}

func defaultNodeConfig() node.Config {
git, _ := version.VCS()
cfg := node.DefaultConfig
cfg.Name = clientIdentifier
cfg.Version = params.VersionWithCommit(gitCommit, gitDate)
cfg.Version = params.VersionWithCommit(git.Commit, git.Date)
cfg.HTTPModules = append(cfg.HTTPModules, "eth")
cfg.WSModules = append(cfg.WSModules, "eth")
cfg.IPCPath = "geth.ipc"
Expand Down
7 changes: 2 additions & 5 deletions cmd/geth/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -52,11 +52,6 @@ const (
)

var (
// Git SHA1 commit hash of the release (set via linker flags)
gitCommit = ""
gitDate = ""
// The app that holds all commands and flags.
app = flags.NewApp(gitCommit, gitDate, "the go-ethereum command line interface")
// flags that configure the node
nodeFlags = flags.Merge([]cli.Flag{
utils.IdentityFlag,
Expand Down Expand Up @@ -205,6 +200,8 @@ var (
}
)

var app = flags.NewApp("the go-ethereum command line interface")

func init() {
// Initialize the CLI app and start Geth
app.Action = geth
Expand Down
19 changes: 10 additions & 9 deletions cmd/geth/misccmd.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ import (

"github.com/ethereum/go-ethereum/cmd/utils"
"github.com/ethereum/go-ethereum/consensus/ethash"
"github.com/ethereum/go-ethereum/internal/version"
"github.com/ethereum/go-ethereum/params"
"github.com/urfave/cli/v2"
)
Expand All @@ -38,9 +39,7 @@ var (
VersionCheckVersionFlag = &cli.StringFlag{
Name: "check.version",
Usage: "Version to check",
Value: fmt.Sprintf("Geth/v%v/%v-%v/%v",
params.VersionWithCommit(gitCommit, gitDate),
runtime.GOOS, runtime.GOARCH, runtime.Version()),
Value: version.ClientName(clientIdentifier),
}
makecacheCommand = &cli.Command{
Action: makecache,
Expand All @@ -67,7 +66,7 @@ Regular users do not need to execute it.
`,
}
versionCommand = &cli.Command{
Action: version,
Action: printVersion,
Name: "version",
Usage: "Print version numbers",
ArgsUsage: " ",
Expand Down Expand Up @@ -127,14 +126,16 @@ func makedag(ctx *cli.Context) error {
return nil
}

func version(ctx *cli.Context) error {
func printVersion(ctx *cli.Context) error {
git, _ := version.VCS()

fmt.Println(strings.Title(clientIdentifier))
fmt.Println("Version:", params.VersionWithMeta)
if gitCommit != "" {
fmt.Println("Git Commit:", gitCommit)
if git.Commit != "" {
fmt.Println("Git Commit:", git.Commit)
}
if gitDate != "" {
fmt.Println("Git Commit Date:", gitDate)
if git.Date != "" {
fmt.Println("Git Commit Date:", git.Date)
}
fmt.Println("Architecture:", runtime.GOARCH)
fmt.Println("Go Version:", runtime.Version())
Expand Down
8 changes: 1 addition & 7 deletions cmd/p2psim/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -100,14 +100,8 @@ var (
}
)

var (
// Git information set by linker when building with ci.go.
gitCommit string
gitDate string
)

func main() {
app := flags.NewApp(gitCommit, gitDate, "devp2p simulation command-line client")
app := flags.NewApp("devp2p simulation command-line client")
app.Flags = []cli.Flag{
apiFlag,
}
Expand Down
6 changes: 4 additions & 2 deletions internal/flags/helpers.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,15 +20,17 @@ import (
"fmt"
"strings"

"github.com/ethereum/go-ethereum/internal/version"
"github.com/ethereum/go-ethereum/params"
"github.com/urfave/cli/v2"
)

// NewApp creates an app with sane defaults.
func NewApp(gitCommit, gitDate, usage string) *cli.App {
func NewApp(usage string) *cli.App {
git, _ := version.VCS()
app := cli.NewApp()
app.EnableBashCompletion = true
app.Version = params.VersionWithCommit(gitCommit, gitDate)
app.Version = params.VersionWithCommit(git.Commit, git.Date)
app.Usage = usage
app.Copyright = "Copyright 2013-2022 The go-ethereum Authors"
app.Before = func(ctx *cli.Context) error {
Expand Down
4 changes: 2 additions & 2 deletions internal/version/vcs_fallback.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,6 @@ import "runtime/debug"

// In Go versions before 1.18, VCS information is not available.

func vcsInfo(info *debug.BuildInfo) (gitStatus, bool) {
return gitStatus{}, false
func buildInfoVCS(info *debug.BuildInfo) (VCSInfo, bool) {
return VCSInfo{}, false
}
29 changes: 18 additions & 11 deletions internal/version/vcs_go1.18.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,29 +19,36 @@

package version

import "runtime/debug"
import (
"runtime/debug"
"time"
)

// In go 1.18 and beyond, the go tool embeds VCS information into the build.

// vcsInfo returns VCS information of the build.
func vcsInfo(info *debug.BuildInfo) (s gitStatus, ok bool) {
const (
govcsTimeLayout = "2006-01-02T15:04:05Z"
ourTimeLayout = "20060102"
)

// buildInfoVCS returns VCS information of the build.
func buildInfoVCS(info *debug.BuildInfo) (s VCSInfo, ok bool) {
for _, v := range info.Settings {
switch v.Key {
case "vcs.revision":
if len(v.Value) < 8 {
s.revision = v.Value
} else {
s.revision = v.Value[:8]
}
s.Commit = v.Value
case "vcs.modified":
if v.Value == "true" {
s.modified = true
s.Dirty = true
}
case "vcs.time":
s.time = v.Value
t, err := time.Parse(govcsTimeLayout, v.Value)
if err == nil {
s.Date = t.Format(ourTimeLayout)
}
}
}
if s.revision != "" && s.time != "" {
if s.Commit != "" && s.Date != "" {
ok = true
}
return
Expand Down
Loading