chore(version): Use git tag for version reporting (#51)

* chore: miscellaneous nits

* use correct default chain configs

* add validation and logs around prague1 checks

* fix unit tests

* chore(version): Use git tag for version reporting

* docker + release binaries fix

* redeclare docker args in build stage
This commit is contained in:
Cal Bera 2025-08-08 15:06:53 -07:00 committed by GitHub
parent 497e1a4e42
commit c7f3b7b72b
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
9 changed files with 77 additions and 17 deletions

View file

@ -19,7 +19,10 @@ jobs:
linux-intel: linux-intel:
name: Linux Build (intel) name: Linux Build (intel)
needs: [extract-version]
runs-on: ubuntu-latest runs-on: ubuntu-latest
env:
VERSION: ${{ needs.extract-version.outputs.VERSION }}
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v4
@ -36,7 +39,7 @@ jobs:
- name: Build (amd64) - name: Build (amd64)
run: | run: |
go run build/ci.go install -static -arch amd64 -dlgo go run build/ci.go install -static -arch amd64 -dlgo -git-tag="${{ env.VERSION }}"
- name: Create archive (amd64) - name: Create archive (amd64)
run: | run: |
@ -57,7 +60,10 @@ jobs:
linux-arm: linux-arm:
name: Linux Build (arm) name: Linux Build (arm)
needs: [extract-version]
runs-on: ubuntu-latest runs-on: ubuntu-latest
env:
VERSION: ${{ needs.extract-version.outputs.VERSION }}
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v4
@ -75,7 +81,7 @@ jobs:
- name: Build (arm64) - name: Build (arm64)
run: | run: |
go run build/ci.go install -static -dlgo -arch arm64 -cc aarch64-linux-gnu-gcc go run build/ci.go install -static -dlgo -arch arm64 -cc aarch64-linux-gnu-gcc -git-tag="${{ env.VERSION }}"
- name: Create archive (arm64) - name: Create archive (arm64)
run: | run: |

View file

@ -6,6 +6,11 @@ ARG BUILDNUM=""
# Build Geth in a stock Go builder container # Build Geth in a stock Go builder container
FROM golang:1.24-alpine AS builder FROM golang:1.24-alpine AS builder
# These build arguments need to be redeclared in the builder stage
ARG COMMIT
ARG VERSION
ARG BUILDNUM
RUN apk add --no-cache gcc musl-dev linux-headers git RUN apk add --no-cache gcc musl-dev linux-headers git
# Get dependencies - will also be cached if we won't change go.mod/go.sum # Get dependencies - will also be cached if we won't change go.mod/go.sum
@ -14,7 +19,14 @@ COPY go.sum /bera-geth/
RUN cd /bera-geth && go mod download RUN cd /bera-geth && go mod download
ADD . /bera-geth ADD . /bera-geth
RUN cd /bera-geth && go run build/ci.go install -static ./cmd/bera-geth # Pass git information to the build process
# When VERSION is provided (e.g., from CI), use it as the git tag
RUN cd /bera-geth && \
if [ -n "$VERSION" ]; then \
go run build/ci.go install -static -git-tag="$VERSION" -git-commit="$COMMIT" ./cmd/bera-geth; \
else \
go run build/ci.go install -static ./cmd/bera-geth; \
fi
# Pull Geth into a second stage deploy alpine container # Pull Geth into a second stage deploy alpine container
FROM alpine:latest FROM alpine:latest

View file

@ -6,6 +6,11 @@ ARG BUILDNUM=""
# Build Geth in a stock Go builder container # Build Geth in a stock Go builder container
FROM golang:1.24-alpine AS builder FROM golang:1.24-alpine AS builder
# These build arguments need to be redeclared in the builder stage
ARG COMMIT
ARG VERSION
ARG BUILDNUM
RUN apk add --no-cache gcc musl-dev linux-headers git RUN apk add --no-cache gcc musl-dev linux-headers git
# Get dependencies - will also be cached if we won't change go.mod/go.sum # Get dependencies - will also be cached if we won't change go.mod/go.sum
@ -19,9 +24,20 @@ ADD . /bera-geth
# makes it so that under certain circumstances, the docker layer can be cached, # makes it so that under certain circumstances, the docker layer can be cached,
# and the builder can jump to the next (build all) command, with the go cache fully loaded. # and the builder can jump to the next (build all) command, with the go cache fully loaded.
# #
RUN cd /bera-geth && go run build/ci.go install -static ./cmd/bera-geth # Pass git information to the build process when provided
RUN cd /bera-geth && \
if [ -n "$VERSION" ]; then \
go run build/ci.go install -static -git-tag="$VERSION" -git-commit="$COMMIT" ./cmd/bera-geth; \
else \
go run build/ci.go install -static ./cmd/bera-geth; \
fi
RUN cd /bera-geth && go run build/ci.go install -static RUN cd /bera-geth && \
if [ -n "$VERSION" ]; then \
go run build/ci.go install -static -git-tag="$VERSION" -git-commit="$COMMIT"; \
else \
go run build/ci.go install -static; \
fi
# Pull all binaries into a second stage deploy alpine container # Pull all binaries into a second stage deploy alpine container
FROM alpine:latest FROM alpine:latest

View file

@ -8,11 +8,6 @@ GOBIN = ./build/bin
GO ?= latest GO ?= latest
GORUN = go run GORUN = go run
COMMIT = $(shell git log -1 --format='%H')
BRANCH = $(shell git rev-parse --abbrev-ref HEAD)
TAG := $(shell git describe --tags --abbrev=0 --match "v*")
BUILD_FLAGS := -git-commit=$(COMMIT) -git-branch=$(BRANCH) -git-tag=$(TAG)
#? bera-geth: Build bera-geth. #? bera-geth: Build bera-geth.
bera-geth: bera-geth:
$(GORUN) build/ci.go install ./cmd/bera-geth $(GORUN) build/ci.go install ./cmd/bera-geth

View file

@ -705,9 +705,14 @@ func doDockerBuildx(cmdline []string) {
{file: "Dockerfile.alltools", base: fmt.Sprintf("%s:alltools-", *hubImage)}, {file: "Dockerfile.alltools", base: fmt.Sprintf("%s:alltools-", *hubImage)},
} { } {
gethImage := fmt.Sprintf("%s%s", spec.base, tag) gethImage := fmt.Sprintf("%s%s", spec.base, tag)
// Prefer tag when present for VERSION
dockerVersion := version.WithMeta
if env.Tag != "" {
dockerVersion = env.Tag
}
cmd := exec.Command("docker", "buildx", "build", cmd := exec.Command("docker", "buildx", "build",
"--build-arg", "COMMIT="+env.Commit, "--build-arg", "COMMIT="+env.Commit,
"--build-arg", "VERSION="+version.WithMeta, "--build-arg", "VERSION="+dockerVersion,
"--build-arg", "BUILDNUM="+env.Buildnum, "--build-arg", "BUILDNUM="+env.Buildnum,
"--tag", gethImage, "--tag", gethImage,
"--platform", *platform, "--platform", *platform,

View file

@ -131,7 +131,13 @@ func defaultNodeConfig() node.Config {
git, _ := version.VCS() git, _ := version.VCS()
cfg := node.DefaultConfig cfg := node.DefaultConfig
cfg.Name = clientIdentifier cfg.Name = clientIdentifier
cfg.Version = version.WithCommit(git.Commit, git.Date) // Prefer git tag for the advertised version (used in web3_clientVersion),
// trimming any leading 'v' because NodeName adds the 'v' prefix itself.
ver := version.WithMeta
if git.Tag != "" {
ver = strings.TrimPrefix(git.Tag, "v")
}
cfg.Version = ver
cfg.HTTPModules = append(cfg.HTTPModules, "eth") cfg.HTTPModules = append(cfg.HTTPModules, "eth")
cfg.WSModules = append(cfg.WSModules, "eth") cfg.WSModules = append(cfg.WSModules, "eth")
cfg.IPCPath = clientIdentifier + ".ipc" cfg.IPCPath = clientIdentifier + ".ipc"

View file

@ -24,6 +24,7 @@ import (
"math" "math"
"math/big" "math/big"
"runtime" "runtime"
"strings"
"sync" "sync"
"time" "time"
@ -357,13 +358,21 @@ func New(stack *node.Node, config *ethconfig.Config) (*Ethereum, error) {
func makeExtraData(extra []byte) []byte { func makeExtraData(extra []byte) []byte {
if len(extra) == 0 { if len(extra) == 0 {
// create default extradata in ASCII format similar to reth // Create default extradata in ASCII format similar to reth
// Format: "bera-geth/vX.Y.Z/platform" // Desired format examples:
// - bera-geth/v1.011602.0-rc5/linux when tag exists
// - bera-geth/v<with-meta>/linux as fallback
tag := version.WithMeta tag := version.WithMeta
if vcs, ok := version.VCS(); ok && vcs.Tag != "" { if vcs, ok := version.VCS(); ok && vcs.Tag != "" {
// Use tag as-is here because the desired extradata includes the leading 'v'
tag = vcs.Tag tag = vcs.Tag
} }
versionStr := fmt.Sprintf("bera-geth/v%s/%s", tag, runtime.GOOS) versionStr := fmt.Sprintf("bera-geth/%s/%s", func() string {
if strings.HasPrefix(tag, "v") {
return tag
}
return "v" + tag
}(), runtime.GOOS)
extra = []byte(versionStr) extra = []byte(versionStr)
} }
if uint64(len(extra)) > params.MaximumExtraDataSize { if uint64(len(extra)) > params.MaximumExtraDataSize {

View file

@ -38,7 +38,12 @@ func NewApp(usage string) *cli.App {
git, _ := version.VCS() git, _ := version.VCS()
app := cli.NewApp() app := cli.NewApp()
app.EnableBashCompletion = true app.EnableBashCompletion = true
app.Version = version.WithCommit(git.Commit, git.Date) // Prefer git tag for the concise CLI version (-v), falling back to commit-based string
if git.Tag != "" {
app.Version = git.Tag
} else {
app.Version = version.WithCommit(git.Commit, git.Date)
}
app.Usage = usage app.Usage = usage
app.Copyright = "Copyright 2013-2025 The go-ethereum Authors" app.Copyright = "Copyright 2013-2025 The go-ethereum Authors"
app.Before = func(ctx *cli.Context) error { app.Before = func(ctx *cli.Context) error {

View file

@ -69,9 +69,15 @@ func Archive(tag, gitCommit string) string {
// conventions in the Ethereum p2p network. // conventions in the Ethereum p2p network.
func ClientName(clientIdentifier string) string { func ClientName(clientIdentifier string) string {
git, _ := VCS() git, _ := VCS()
// Compose version for client name: prefer git tag (without leading 'v'),
// otherwise fall back to WithCommit (which includes meta/commit/date if needed).
ver := WithCommit(git.Commit, git.Date)
if git.Tag != "" {
ver = strings.TrimPrefix(git.Tag, "v")
}
return fmt.Sprintf("%s/v%v/%v-%v/%v", return fmt.Sprintf("%s/v%v/%v-%v/%v",
strings.Title(clientIdentifier), strings.Title(clientIdentifier),
WithCommit(git.Commit, git.Date), ver,
runtime.GOOS, runtime.GOARCH, runtime.GOOS, runtime.GOARCH,
runtime.Version(), runtime.Version(),
) )