refactor: add pkg/version package and use build-time version in telemetry
Replace hardcoded "dev" version in telemetry provider with version.Version() populated from ldflags at startup.
- commit
- eef0d4ed578e0ec1b4475e8d71cedfc6c68b6c94
- author
- brice · · 2026-02-10 07:33 UTC
- parent
- 4555ccb
- signature
- unsigned
3 files · +33 -2
M internal/app/run.go +4 -1
| @@ -58,6 +58,9 @@ import ( | |||
| 58 | 58 | // Domain | |
| 59 | 59 | "github.com/bnema/gordon/internal/domain" | |
| 60 | 60 | ||
| 61 | + | // Packages | |
| 62 | + | "github.com/bnema/gordon/pkg/version" | |
| 63 | + | ||
| 61 | 64 | // Use cases | |
| 62 | 65 | "github.com/bnema/gordon/internal/usecase/auth" | |
| 63 | 66 | "github.com/bnema/gordon/internal/usecase/backup" | |
| @@ -210,7 +213,7 @@ func Run(ctx context.Context, configPath string) error { | |||
| 210 | 213 | ctx = zerowrap.WithCtx(ctx, log) | |
| 211 | 214 | ||
| 212 | 215 | // Initialize OpenTelemetry | |
| 213 | - | telProvider, telShutdown, err := telemetry.NewProvider(ctx, cfg.Telemetry, "gordon", "dev") | |
| 216 | + | telProvider, telShutdown, err := telemetry.NewProvider(ctx, cfg.Telemetry, "gordon", version.Version()) | |
| 214 | 217 | if err != nil { | |
| 215 | 218 | log.Warn().Err(err).Msg("failed to initialize telemetry, continuing without it") | |
| 216 | 219 | } else { | |
| @@ -58,6 +58,9 @@ import ( | |||||
| 58 | // Domain | 58 | // Domain | ||
| 59 | "github.com/bnema/gordon/internal/domain" | 59 | "github.com/bnema/gordon/internal/domain" | ||
| 60 | 60 | ||||
| 61 | + | // Packages | |||
| 62 | + | "github.com/bnema/gordon/pkg/version" | |||
| 63 | + | ||||
| 61 | // Use cases | 64 | // Use cases | ||
| 62 | "github.com/bnema/gordon/internal/usecase/auth" | 65 | "github.com/bnema/gordon/internal/usecase/auth" | ||
| 63 | "github.com/bnema/gordon/internal/usecase/backup" | 66 | "github.com/bnema/gordon/internal/usecase/backup" | ||
| @@ -210,7 +213,7 @@ func Run(ctx context.Context, configPath string) error { | |||||
| 210 | ctx = zerowrap.WithCtx(ctx, log) | 213 | ctx = zerowrap.WithCtx(ctx, log) | ||
| 211 | 214 | ||||
| 212 | // Initialize OpenTelemetry | 215 | // Initialize OpenTelemetry | ||
| 213 | - | telProvider, telShutdown, err := telemetry.NewProvider(ctx, cfg.Telemetry, "gordon", "dev") | 216 | + | telProvider, telShutdown, err := telemetry.NewProvider(ctx, cfg.Telemetry, "gordon", version.Version()) |
| 214 | if err != nil { | 217 | if err != nil { | ||
| 215 | log.Warn().Err(err).Msg("failed to initialize telemetry, continuing without it") | 218 | log.Warn().Err(err).Msg("failed to initialize telemetry, continuing without it") | ||
| 216 | } else { | 219 | } else { | ||
M main.go +3 -1
| @@ -4,6 +4,7 @@ import ( | |||
| 4 | 4 | "os" | |
| 5 | 5 | ||
| 6 | 6 | "github.com/bnema/gordon/internal/adapters/in/cli" | |
| 7 | + | versionpkg "github.com/bnema/gordon/pkg/version" | |
| 7 | 8 | ) | |
| 8 | 9 | ||
| 9 | 10 | // Build information set by goreleaser via ldflags | |
| @@ -14,7 +15,8 @@ var ( | |||
| 14 | 15 | ) | |
| 15 | 16 | ||
| 16 | 17 | func main() { | |
| 17 | - | // Set version information for the CLI | |
| 18 | + | // Set version information globally and for the CLI | |
| 19 | + | versionpkg.Set(version, commit, date) | |
| 18 | 20 | cli.SetVersionInfo(version, commit, date) | |
| 19 | 21 | ||
| 20 | 22 | if err := cli.NewRootCmd().Execute(); err != nil { | |
| @@ -4,6 +4,7 @@ import ( | |||||
| 4 | "os" | 4 | "os" | ||
| 5 | 5 | ||||
| 6 | "github.com/bnema/gordon/internal/adapters/in/cli" | 6 | "github.com/bnema/gordon/internal/adapters/in/cli" | ||
| 7 | + | versionpkg "github.com/bnema/gordon/pkg/version" | |||
| 7 | ) | 8 | ) | ||
| 8 | 9 | ||||
| 9 | // Build information set by goreleaser via ldflags | 10 | // Build information set by goreleaser via ldflags | ||
| @@ -14,7 +15,8 @@ var ( | |||||
| 14 | ) | 15 | ) | ||
| 15 | 16 | ||||
| 16 | func main() { | 17 | func main() { | ||
| 17 | - | // Set version information for the CLI | 18 | + | // Set version information globally and for the CLI |
| 19 | + | versionpkg.Set(version, commit, date) | |||
| 18 | cli.SetVersionInfo(version, commit, date) | 20 | cli.SetVersionInfo(version, commit, date) | ||
| 19 | 21 | ||||
| 20 | if err := cli.NewRootCmd().Execute(); err != nil { | 22 | if err := cli.NewRootCmd().Execute(); err != nil { | ||
A pkg/version/version.go +26 -0
| @@ -0,0 +1,26 @@ | |||
| 1 | + | // Package version holds build-time version info for Gordon. | |
| 2 | + | // Set via main using Set(), read from anywhere via Get(). | |
| 3 | + | package version | |
| 4 | + | ||
| 5 | + | // Build information, populated by Set() at startup. | |
| 6 | + | var ( | |
| 7 | + | version = "dev" | |
| 8 | + | commit = "unknown" | |
| 9 | + | buildDate = "unknown" | |
| 10 | + | ) | |
| 11 | + | ||
| 12 | + | // Set stores build-time version info. Call once from main. | |
| 13 | + | func Set(v, c, d string) { | |
| 14 | + | version = v | |
| 15 | + | commit = c | |
| 16 | + | buildDate = d | |
| 17 | + | } | |
| 18 | + | ||
| 19 | + | // Version returns the build version string. | |
| 20 | + | func Version() string { return version } | |
| 21 | + | ||
| 22 | + | // Commit returns the build commit hash. | |
| 23 | + | func Commit() string { return commit } | |
| 24 | + | ||
| 25 | + | // BuildDate returns the build date string. | |
| 26 | + | func BuildDate() string { return buildDate } | |
| @@ -0,0 +1,26 @@ | |||||
| 1 | + | // Package version holds build-time version info for Gordon. | |||
| 2 | + | // Set via main using Set(), read from anywhere via Get(). | |||
| 3 | + | package version | |||
| 4 | + | ||||
| 5 | + | // Build information, populated by Set() at startup. | |||
| 6 | + | var ( | |||
| 7 | + | version = "dev" | |||
| 8 | + | commit = "unknown" | |||
| 9 | + | buildDate = "unknown" | |||
| 10 | + | ) | |||
| 11 | + | ||||
| 12 | + | // Set stores build-time version info. Call once from main. | |||
| 13 | + | func Set(v, c, d string) { | |||
| 14 | + | version = v | |||
| 15 | + | commit = c | |||
| 16 | + | buildDate = d | |||
| 17 | + | } | |||
| 18 | + | ||||
| 19 | + | // Version returns the build version string. | |||
| 20 | + | func Version() string { return version } | |||
| 21 | + | ||||
| 22 | + | // Commit returns the build commit hash. | |||
| 23 | + | func Commit() string { return commit } | |||
| 24 | + | ||||
| 25 | + | // BuildDate returns the build date string. | |||
| 26 | + | func BuildDate() string { return buildDate } | |||