Read the architecture at run time, not via a Buildarch ldflag (closes #66) #67

Zusammengeführt
clawbot hat 1 Commits von issue-66-remove-buildarch nach next 2026-10-02 01:03:39 +02:00 zusammengeführt
2 geänderte Dateien mit 17 neuen und 28 gelöschten Zeilen
Nur Änderungen aus Commit 03e49e73a0 werden angezeigt - Alle Commits anzeigen
+5 -8
Datei anzeigen
@@ -24,7 +24,8 @@ last_modified: 2026-09-08
1. Embed the git commit hash into the binary and include it in startup logs and
in health check output. This is to make it easier to correlate running
instances with their code. Do not include build time or build user, as these
will make the build nondeterministic.
will make the build nondeterministic. The architecture is not passed in at
build time; a program that reports it reads `runtime.GOARCH` at run time.
Example relevant Makefile sections:
@@ -35,16 +36,14 @@ last_modified: 2026-09-08
import (
"fmt"
"runtime"
)
var (
Version string
Buildarch string
)
var Version string
func main() {
fmt.Printf("Version: %s\n", Version)
fmt.Printf("Buildarch: %s\n", Buildarch)
fmt.Printf("Arch: %s\n", runtime.GOARCH)
}
```
@@ -57,10 +56,8 @@ last_modified: 2026-09-08
# `--build-arg VERSION=...`; where a build stage invokes make,
# `ARG VERSION` puts it in the environment and `?=` defers to it.
VERSION ?= $(shell git describe --always --dirty)
BUILDARCH := $(shell uname -m)
GOLDFLAGS += -X main.Version=$(VERSION)
GOLDFLAGS += -X main.Buildarch=$(BUILDARCH)
# osx can't statically link apparently?!
ifeq ($(UNAME_S),Darwin)
+2 -10
Datei anzeigen
@@ -120,13 +120,11 @@ import (
var (
Appname string = "CHANGEME"
Version string
Buildarch string
)
func main() {
globals.Appname = Appname
globals.Version = Version
globals.Buildarch = Buildarch
fx.New(
fx.Provide(
@@ -826,7 +824,7 @@ func (l *Logger) Identify() {
l.log.Info("starting",
"appname", l.params.Globals.Appname,
"version", l.params.Globals.Version,
"buildarch", l.params.Globals.Buildarch,
"arch", runtime.GOARCH,
)
}
```
@@ -948,20 +946,17 @@ import "go.uber.org/fx"
var (
Appname string
Version string
Buildarch string
)
// Struct for DI
type Globals struct {
Appname string
Version string
Buildarch string
}
func New(lc fx.Lifecycle) (*Globals, error) {
n := &Globals{
Appname: Appname,
Buildarch: Buildarch,
Version: Version,
}
return n, nil
@@ -975,13 +970,11 @@ func New(lc fx.Lifecycle) (*Globals, error) {
var (
Appname string = "CHANGEME" // Default, overridden by build
Version string // Set at build time
Buildarch string // Set at build time
)
func main() {
globals.Appname = Appname
globals.Version = Version
globals.Buildarch = Buildarch
// ...
}
```
@@ -999,10 +992,9 @@ Use ldflags to inject version information at build time:
# stage invokes make, `ARG VERSION` puts it in the environment and `?=` defers
# to it.
VERSION ?= $(shell git describe --tags --always)
BUILDARCH := $(shell go env GOARCH)
build:
go build -ldflags "-X main.Version=$(VERSION) -X main.Buildarch=$(BUILDARCH)" ./cmd/httpd
go build -ldflags "-X main.Version=$(VERSION)" ./cmd/httpd
```
---