From dac54e31a7456a364d07f238749c8354a110689b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A9ter=20Szil=C3=A1gyi?= Date: Sun, 20 Oct 2024 19:28:39 +0300 Subject: [PATCH] build, internal, version: break ci.go/version->common dependency (#30638) This PR tries to break the ci.go to common dependency by moving the version number out of params. --- build/ci.go | 22 ++++++------ cmd/geth/config.go | 3 +- cmd/geth/consolecmd_test.go | 6 ++-- cmd/geth/misccmd.go | 3 +- eth/backend.go | 6 ++-- eth/catalyst/api.go | 3 +- eth/catalyst/api_test.go | 3 +- internal/flags/helpers.go | 3 +- internal/version/vcs.go | 25 ++++++++++++++ internal/version/version.go | 59 ++++++++++++++++++++------------ params/version.go | 67 ------------------------------------- version/version.go | 24 +++++++++++++ 12 files changed, 110 insertions(+), 114 deletions(-) delete mode 100644 params/version.go create mode 100644 version/version.go diff --git a/build/ci.go b/build/ci.go index f5d5b53e32..1765d750c2 100644 --- a/build/ci.go +++ b/build/ci.go @@ -56,7 +56,7 @@ import ( "github.com/cespare/cp" "github.com/ethereum/go-ethereum/crypto/signify" "github.com/ethereum/go-ethereum/internal/build" - "github.com/ethereum/go-ethereum/params" + "github.com/ethereum/go-ethereum/internal/version" ) var ( @@ -108,7 +108,7 @@ var ( // A debian package is created for all executables listed here. debEthereum = debPackage{ Name: "ethereum", - Version: params.Version, + Version: version.Semantic, Executables: debExecutables, } @@ -631,7 +631,7 @@ func doArchive(cmdline []string) { var ( env = build.Env() - basegeth = archiveBasename(*arch, params.ArchiveVersion(env.Commit)) + basegeth = archiveBasename(*arch, version.Archive(env.Commit)) geth = "geth-" + basegeth + ext alltools = "geth-alltools-" + basegeth + ext ) @@ -751,7 +751,7 @@ func doDockerBuildx(cmdline []string) { case env.Branch == "master": tags = []string{"latest"} case strings.HasPrefix(env.Tag, "v1."): - tags = []string{"stable", fmt.Sprintf("release-1.%d", params.VersionMinor), "v" + params.Version} + tags = []string{"stable", fmt.Sprintf("release-%v", version.Family), "v" + version.Semantic} } // Need to create a mult-arch builder build.MustRunCommand("docker", "buildx", "create", "--use", "--name", "multi-arch-builder", "--platform", *platform) @@ -767,7 +767,7 @@ func doDockerBuildx(cmdline []string) { gethImage := fmt.Sprintf("%s%s", spec.base, tag) build.MustRunCommand("docker", "buildx", "build", "--build-arg", "COMMIT="+env.Commit, - "--build-arg", "VERSION="+params.VersionWithMeta, + "--build-arg", "VERSION="+version.WithMeta, "--build-arg", "BUILDNUM="+env.Buildnum, "--tag", gethImage, "--platform", *platform, @@ -1139,19 +1139,19 @@ func doWindowsInstaller(cmdline []string) { // Build the installer. This assumes that all the needed files have been previously // built (don't mix building and packaging to keep cross compilation complexity to a // minimum). - version := strings.Split(params.Version, ".") + ver := strings.Split(version.Semantic, ".") if env.Commit != "" { - version[2] += "-" + env.Commit[:8] + ver[2] += "-" + env.Commit[:8] } - installer, err := filepath.Abs("geth-" + archiveBasename(*arch, params.ArchiveVersion(env.Commit)) + ".exe") + installer, err := filepath.Abs("geth-" + archiveBasename(*arch, version.Archive(env.Commit)) + ".exe") if err != nil { log.Fatalf("Failed to convert installer file path: %v", err) } build.MustRunCommand("makensis.exe", "/DOUTPUTFILE="+installer, - "/DMAJORVERSION="+version[0], - "/DMINORVERSION="+version[1], - "/DBUILDVERSION="+version[2], + "/DMAJORVERSION="+ver[0], + "/DMINORVERSION="+ver[1], + "/DBUILDVERSION="+ver[2], "/DARCH="+*arch, filepath.Join(*workdir, "geth.nsi"), ) diff --git a/cmd/geth/config.go b/cmd/geth/config.go index fd57ff40de..8282c80c41 100644 --- a/cmd/geth/config.go +++ b/cmd/geth/config.go @@ -42,7 +42,6 @@ import ( "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/metrics" "github.com/ethereum/go-ethereum/node" - "github.com/ethereum/go-ethereum/params" "github.com/ethereum/go-ethereum/rpc" "github.com/naoina/toml" "github.com/urfave/cli/v2" @@ -130,7 +129,7 @@ func defaultNodeConfig() node.Config { git, _ := version.VCS() cfg := node.DefaultConfig cfg.Name = clientIdentifier - cfg.Version = params.VersionWithCommit(git.Commit, git.Date) + cfg.Version = version.WithCommit(git.Commit, git.Date) cfg.HTTPModules = append(cfg.HTTPModules, "eth") cfg.WSModules = append(cfg.WSModules, "eth") cfg.IPCPath = "geth.ipc" diff --git a/cmd/geth/consolecmd_test.go b/cmd/geth/consolecmd_test.go index ffaf17741f..b8c2c498a6 100644 --- a/cmd/geth/consolecmd_test.go +++ b/cmd/geth/consolecmd_test.go @@ -26,7 +26,7 @@ import ( "testing" "time" - "github.com/ethereum/go-ethereum/params" + "github.com/ethereum/go-ethereum/internal/version" ) const ( @@ -60,7 +60,7 @@ func TestConsoleWelcome(t *testing.T) { geth.SetTemplateFunc("goos", func() string { return runtime.GOOS }) geth.SetTemplateFunc("goarch", func() string { return runtime.GOARCH }) geth.SetTemplateFunc("gover", runtime.Version) - geth.SetTemplateFunc("gethver", func() string { return params.VersionWithCommit("", "") }) + geth.SetTemplateFunc("gethver", func() string { return version.WithCommit("", "") }) geth.SetTemplateFunc("niltime", func() string { return time.Unix(1695902100, 0).Format("Mon Jan 02 2006 15:04:05 GMT-0700 (MST)") }) @@ -129,7 +129,7 @@ func testAttachWelcome(t *testing.T, geth *testgeth, endpoint, apis string) { attach.SetTemplateFunc("goos", func() string { return runtime.GOOS }) attach.SetTemplateFunc("goarch", func() string { return runtime.GOARCH }) attach.SetTemplateFunc("gover", runtime.Version) - attach.SetTemplateFunc("gethver", func() string { return params.VersionWithCommit("", "") }) + attach.SetTemplateFunc("gethver", func() string { return version.WithCommit("", "") }) attach.SetTemplateFunc("niltime", func() string { return time.Unix(1695902100, 0).Format("Mon Jan 02 2006 15:04:05 GMT-0700 (MST)") }) diff --git a/cmd/geth/misccmd.go b/cmd/geth/misccmd.go index f3530c30fb..2d31f3abe7 100644 --- a/cmd/geth/misccmd.go +++ b/cmd/geth/misccmd.go @@ -23,7 +23,6 @@ import ( "strings" "github.com/ethereum/go-ethereum/internal/version" - "github.com/ethereum/go-ethereum/params" "github.com/urfave/cli/v2" ) @@ -73,7 +72,7 @@ func printVersion(ctx *cli.Context) error { git, _ := version.VCS() fmt.Println(strings.Title(clientIdentifier)) - fmt.Println("Version:", params.VersionWithMeta) + fmt.Println("Version:", version.WithMeta) if git.Commit != "" { fmt.Println("Git Commit:", git.Commit) } diff --git a/eth/backend.go b/eth/backend.go index 663b0e5fe7..ccfe650f41 100644 --- a/eth/backend.go +++ b/eth/backend.go @@ -47,6 +47,7 @@ import ( "github.com/ethereum/go-ethereum/event" "github.com/ethereum/go-ethereum/internal/ethapi" "github.com/ethereum/go-ethereum/internal/shutdowncheck" + "github.com/ethereum/go-ethereum/internal/version" "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/miner" "github.com/ethereum/go-ethereum/node" @@ -56,6 +57,7 @@ import ( "github.com/ethereum/go-ethereum/params" "github.com/ethereum/go-ethereum/rlp" "github.com/ethereum/go-ethereum/rpc" + gethversion "github.com/ethereum/go-ethereum/version" ) // Config contains the configuration options of the ETH protocol. @@ -172,7 +174,7 @@ func New(stack *node.Node, config *ethconfig.Config) (*Ethereum, error) { if !config.SkipBcVersionCheck { if bcVersion != nil && *bcVersion > core.BlockChainVersion { - return nil, fmt.Errorf("database version is v%d, Geth %s only supports v%d", *bcVersion, params.VersionWithMeta, core.BlockChainVersion) + return nil, fmt.Errorf("database version is v%d, Geth %s only supports v%d", *bcVersion, version.WithMeta, core.BlockChainVersion) } else if bcVersion == nil || *bcVersion < core.BlockChainVersion { if bcVersion != nil { // only print warning on upgrade, not on init log.Warn("Upgrade blockchain database version", "from", dbVer, "to", core.BlockChainVersion) @@ -278,7 +280,7 @@ func makeExtraData(extra []byte) []byte { if len(extra) == 0 { // create default extradata extra, _ = rlp.EncodeToBytes([]interface{}{ - uint(params.VersionMajor<<16 | params.VersionMinor<<8 | params.VersionPatch), + uint(gethversion.Major<<16 | gethversion.Minor<<8 | gethversion.Patch), "geth", runtime.Version(), runtime.GOOS, diff --git a/eth/catalyst/api.go b/eth/catalyst/api.go index 75b49bf336..4779f9756b 100644 --- a/eth/catalyst/api.go +++ b/eth/catalyst/api.go @@ -37,7 +37,6 @@ import ( "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/miner" "github.com/ethereum/go-ethereum/node" - "github.com/ethereum/go-ethereum/params" "github.com/ethereum/go-ethereum/params/forks" "github.com/ethereum/go-ethereum/rlp" "github.com/ethereum/go-ethereum/rpc" @@ -1194,7 +1193,7 @@ func (api *ConsensusAPI) GetClientVersionV1(info engine.ClientVersionV1) []engin { Code: engine.ClientCode, Name: engine.ClientName, - Version: params.VersionWithMeta, + Version: version.WithMeta, Commit: hexutil.Encode(commit), }, } diff --git a/eth/catalyst/api_test.go b/eth/catalyst/api_test.go index d4069e50e6..74a5a66ed1 100644 --- a/eth/catalyst/api_test.go +++ b/eth/catalyst/api_test.go @@ -42,6 +42,7 @@ import ( "github.com/ethereum/go-ethereum/eth" "github.com/ethereum/go-ethereum/eth/downloader" "github.com/ethereum/go-ethereum/eth/ethconfig" + "github.com/ethereum/go-ethereum/internal/version" "github.com/ethereum/go-ethereum/miner" "github.com/ethereum/go-ethereum/node" "github.com/ethereum/go-ethereum/p2p" @@ -1823,7 +1824,7 @@ func TestGetClientVersion(t *testing.T) { t.Fatalf("expected only one returned client version, got %d", len(infos)) } info = infos[0] - if info.Code != engine.ClientCode || info.Name != engine.ClientName || info.Version != params.VersionWithMeta { + if info.Code != engine.ClientCode || info.Name != engine.ClientName || info.Version != version.WithMeta { t.Fatalf("client info does match expected, got %s", info.String()) } } diff --git a/internal/flags/helpers.go b/internal/flags/helpers.go index 0112724fa1..32be3d11a7 100644 --- a/internal/flags/helpers.go +++ b/internal/flags/helpers.go @@ -25,7 +25,6 @@ import ( "github.com/ethereum/go-ethereum/internal/version" "github.com/ethereum/go-ethereum/log" - "github.com/ethereum/go-ethereum/params" "github.com/mattn/go-isatty" "github.com/urfave/cli/v2" ) @@ -39,7 +38,7 @@ func NewApp(usage string) *cli.App { git, _ := version.VCS() app := cli.NewApp() app.EnableBashCompletion = true - app.Version = params.VersionWithCommit(git.Commit, git.Date) + app.Version = version.WithCommit(git.Commit, git.Date) app.Usage = usage app.Copyright = "Copyright 2013-2024 The go-ethereum Authors" app.Before = func(ctx *cli.Context) error { diff --git a/internal/version/vcs.go b/internal/version/vcs.go index 21de8946e8..7ee87bb1b9 100644 --- a/internal/version/vcs.go +++ b/internal/version/vcs.go @@ -28,6 +28,31 @@ const ( ourTimeLayout = "20060102" ) +// These variables are set at build-time by the linker when the build is +// done by build/ci.go. +var gitCommit, gitDate string + +// VCSInfo represents the git repository state. +type VCSInfo struct { + Commit string // head commit hash + Date string // commit time in YYYYMMDD format + Dirty bool +} + +// VCS returns version control information of the current executable. +func VCS() (VCSInfo, bool) { + if gitCommit != "" { + // Use information set by the build script if present. + return VCSInfo{Commit: gitCommit, Date: gitDate}, true + } + if buildInfo, ok := debug.ReadBuildInfo(); ok { + if buildInfo.Main.Path == ourPath { + return buildInfoVCS(buildInfo) + } + } + return VCSInfo{}, false +} + // buildInfoVCS returns VCS information of the build. func buildInfoVCS(info *debug.BuildInfo) (s VCSInfo, ok bool) { for _, v := range info.Settings { diff --git a/internal/version/version.go b/internal/version/version.go index 2cca54b20f..a667827273 100644 --- a/internal/version/version.go +++ b/internal/version/version.go @@ -23,34 +23,49 @@ import ( "runtime/debug" "strings" - "github.com/ethereum/go-ethereum/params" + "github.com/ethereum/go-ethereum/version" ) const ourPath = "github.com/ethereum/go-ethereum" // Path to our module -// These variables are set at build-time by the linker when the build is -// done by build/ci.go. -var gitCommit, gitDate string +// Family holds the textual version string for major.minor +var Family = fmt.Sprintf("%d.%d", version.Major, version.Minor) -// VCSInfo represents the git repository state. -type VCSInfo struct { - Commit string // head commit hash - Date string // commit time in YYYYMMDD format - Dirty bool +// Semantic holds the textual version string for major.minor.patch. +var Semantic = fmt.Sprintf("%d.%d.%d", version.Major, version.Minor, version.Patch) + +// WithMeta holds the textual version string including the metadata. +var WithMeta = func() string { + v := Semantic + if version.Meta != "" { + v += "-" + version.Meta + } + return v +}() + +func WithCommit(gitCommit, gitDate string) string { + vsn := WithMeta + if len(gitCommit) >= 8 { + vsn += "-" + gitCommit[:8] + } + if (version.Meta != "stable") && (gitDate != "") { + vsn += "-" + gitDate + } + return vsn } -// VCS returns version control information of the current executable. -func VCS() (VCSInfo, bool) { - if gitCommit != "" { - // Use information set by the build script if present. - return VCSInfo{Commit: gitCommit, Date: gitDate}, true +// Archive holds the textual version string used for Geth archives. e.g. +// "1.8.11-dea1ce05" for stable releases, or "1.8.13-unstable-21c059b6" for unstable +// releases. +func Archive(gitCommit string) string { + vsn := Semantic + if version.Meta != "stable" { + vsn += "-" + version.Meta } - if buildInfo, ok := debug.ReadBuildInfo(); ok { - if buildInfo.Main.Path == ourPath { - return buildInfoVCS(buildInfo) - } + if len(gitCommit) >= 8 { + vsn += "-" + gitCommit[:8] } - return VCSInfo{}, false + return vsn } // ClientName creates a software name/version identifier according to common @@ -59,7 +74,7 @@ func ClientName(clientIdentifier string) string { git, _ := VCS() return fmt.Sprintf("%s/v%v/%v-%v/%v", strings.Title(clientIdentifier), - params.VersionWithCommit(git.Commit, git.Date), + WithCommit(git.Commit, git.Date), runtime.GOOS, runtime.GOARCH, runtime.Version(), ) @@ -72,7 +87,7 @@ func ClientName(clientIdentifier string) string { // it will assume it's imported by a third-party and will return the imported // version and whether it was replaced by another module. func Info() (version, vcs string) { - version = params.VersionWithMeta + version = WithMeta buildInfo, ok := debug.ReadBuildInfo() if !ok { return version, "" @@ -115,7 +130,7 @@ func versionInfo(info *debug.BuildInfo) string { // If our module path wasn't imported, it's unclear which // version of our code they are running. Fallback to hardcoded // version. - return version + fmt.Sprintf("geth %s", params.VersionWithMeta) + return version + fmt.Sprintf("geth %s", WithMeta) } // Our package is a dependency for the main module. Return path and // version data for both. diff --git a/params/version.go b/params/version.go deleted file mode 100644 index e895503e7f..0000000000 --- a/params/version.go +++ /dev/null @@ -1,67 +0,0 @@ -// Copyright 2016 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package params - -import ( - "fmt" -) - -const ( - VersionMajor = 1 // Major version component of the current release - VersionMinor = 14 // Minor version component of the current release - VersionPatch = 12 // Patch version component of the current release - VersionMeta = "unstable" // Version metadata to append to the version string -) - -// Version holds the textual version string. -var Version = func() string { - return fmt.Sprintf("%d.%d.%d", VersionMajor, VersionMinor, VersionPatch) -}() - -// VersionWithMeta holds the textual version string including the metadata. -var VersionWithMeta = func() string { - v := Version - if VersionMeta != "" { - v += "-" + VersionMeta - } - return v -}() - -// ArchiveVersion holds the textual version string used for Geth archives. e.g. -// "1.8.11-dea1ce05" for stable releases, or "1.8.13-unstable-21c059b6" for unstable -// releases. -func ArchiveVersion(gitCommit string) string { - vsn := Version - if VersionMeta != "stable" { - vsn += "-" + VersionMeta - } - if len(gitCommit) >= 8 { - vsn += "-" + gitCommit[:8] - } - return vsn -} - -func VersionWithCommit(gitCommit, gitDate string) string { - vsn := VersionWithMeta - if len(gitCommit) >= 8 { - vsn += "-" + gitCommit[:8] - } - if (VersionMeta != "stable") && (gitDate != "") { - vsn += "-" + gitDate - } - return vsn -} diff --git a/version/version.go b/version/version.go new file mode 100644 index 0000000000..cbd59f3e9a --- /dev/null +++ b/version/version.go @@ -0,0 +1,24 @@ +// Copyright 2016 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package version + +const ( + Major = 1 // Major version component of the current release + Minor = 14 // Minor version component of the current release + Patch = 12 // Patch version component of the current release + Meta = "unstable" // Version metadata to append to the version string +)