Skip to content

Commit e132f8b

Browse files
committed
feat: implement build-time versioning and log service version across all components
1 parent dd1f644 commit e132f8b

8 files changed

Lines changed: 28 additions & 6 deletions

File tree

.github/workflows/build.yml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,9 @@ jobs:
9292
uses: docker/build-push-action@v6
9393
with:
9494
context: .
95-
build-args: SERVICE=${{ matrix.service }}
95+
build-args: |
96+
SERVICE=${{ matrix.service }}
97+
VERSION=0.5.0
9698
platforms: linux/amd64
9799
load: true
98100
tags: dispatch/${{ matrix.service }}:ci

Dockerfile

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,12 @@
66
# docker build --build-arg SERVICE=bouncemanagement -t dispatch/bouncemanagement .
77

88
ARG SERVICE=mail-gateway
9+
ARG VERSION=0.5.0
910

1011
# ── Builder ───────────────────────────────────────────────────────────────────
1112
FROM golang:1.25-alpine AS builder
1213
ARG SERVICE
14+
ARG VERSION
1315

1416
WORKDIR /src
1517

@@ -18,7 +20,7 @@ RUN go mod download
1820

1921
COPY . .
2022
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 \
21-
go build -trimpath -ldflags="-s -w" \
23+
go build -trimpath -ldflags="-s -w -X dispatch/internal/version.Version=${VERSION}" \
2224
-o /bin/service ./cmd/${SERVICE}
2325

2426
# ── Runtime ───────────────────────────────────────────────────────────────────

cmd/bouncemanagement/main.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import (
1212
"dispatch/internal/loggy"
1313
"dispatch/internal/msgraph"
1414
"dispatch/internal/natsutil"
15+
"dispatch/internal/version"
1516
)
1617

1718
var log = loggy.GetLogger("bouncemanagement")
@@ -49,7 +50,7 @@ func main() {
4950
ticker := time.NewTicker(15 * time.Minute)
5051
defer ticker.Stop()
5152

52-
log.Info("bouncemanagement started", loggy.Kv("mailbox", cfg.MSGraphBounceMailbox))
53+
log.Info("bouncemanagement started", loggy.Kv("version", version.Version), loggy.Kv("mailbox", cfg.MSGraphBounceMailbox))
5354

5455
// run immediately on start
5556
if err := crawler.Run(ctx); err != nil {

cmd/mail-admin/main.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import (
1414
"dispatch/internal/loggy"
1515
"dispatch/internal/natsutil"
1616
"dispatch/internal/sender"
17+
"dispatch/internal/version"
1718
)
1819

1920
var log = loggy.GetLogger("mail-admin")
@@ -79,7 +80,7 @@ func main() {
7980
defer stop()
8081

8182
go func() {
82-
log.Info("mail-admin started", loggy.Kv("port", cfg.Port))
83+
log.Info("mail-admin started", loggy.Kv("version", version.Version), loggy.Kv("port", cfg.Port))
8384
if err := srv.ListenAndServe(); err != nil && err != http.ErrServerClosed {
8485
log.Critical("server error", err)
8586
os.Exit(1)

cmd/mail-gateway/main.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import (
1515
"dispatch/internal/quota"
1616
"dispatch/internal/sender"
1717
"dispatch/internal/spam"
18+
"dispatch/internal/version"
1819
)
1920

2021
var log = loggy.GetLogger("mail-gateway")
@@ -83,7 +84,7 @@ func main() {
8384
defer stop()
8485

8586
go func() {
86-
log.Info("mail-gateway started", loggy.Kv("port", cfg.Port))
87+
log.Info("mail-gateway started", loggy.Kv("version", version.Version), loggy.Kv("port", cfg.Port))
8788
if err := srv.ListenAndServe(); err != nil && err != http.ErrServerClosed {
8889
log.Critical("server error", err)
8990
os.Exit(1)

cmd/mail-worker/main.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import (
1111
"dispatch/internal/loggy"
1212
"dispatch/internal/msgraph"
1313
"dispatch/internal/natsutil"
14+
"dispatch/internal/version"
1415
"dispatch/internal/worker"
1516
)
1617

@@ -66,7 +67,7 @@ func main() {
6667
ctx, stop := signal.NotifyContext(context.Background(), syscall.SIGINT, syscall.SIGTERM)
6768
defer stop()
6869

69-
log.Info("mail-worker started")
70+
log.Info("mail-worker started", loggy.Kv("version", version.Version))
7071
if err := consumer.Run(ctx); err != nil {
7172
log.Critical("consumer error", err)
7273
os.Exit(1)

docs/ai-changes.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,16 @@
3030
**Ergebnis:** Keine Tests betroffen (Dokumentation).
3131
**Hinweis:** **WICHTIG** – Ab sofort nach jeder Änderung Log-Eintrag pflichtig.
3232

33+
## 2026-05-01 — Versionierung: internal/version + ldflags
34+
35+
**Begründung:** Einheitliche Versionsnummer 0.5.0 in allen Services, beim Start geloggt und via `-X dispatch/internal/version.Version` zur Build-Zeit injizierbar.
36+
**Änderungen:**
37+
- `internal/version/version.go` (neues Paket, `var Version = "0.5.0"`)
38+
- `cmd/*/main.go` (alle 4 Services: `loggy.Kv("version", version.Version)` im Startup-Log)
39+
- `Dockerfile` (`ARG VERSION=0.5.0`, ldflags `-X dispatch/internal/version.Version=${VERSION}`)
40+
- `.github/workflows/build.yml` (`build-args: VERSION=0.5.0`)
41+
**Ergebnis:** `go build ./cmd/...` + `go test ./...` → 151 Tests, alles grün.
42+
3343
## 2026-05-01 — GitHub Workflows: Docker-Build, Trivy-Scan, SBOM
3444

3545
**Begründung:** CI deckt jetzt den vollständigen Image-Lifecycle ab: Build → Vulnerability-Scan → SBOM → Push. Trivy SARIF-Upload ins GitHub Security-Tab ermöglicht Triage ohne externen Scan-Server.

internal/version/version.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
package version
2+
3+
// Version is set at build time via -ldflags "-X dispatch/internal/version.Version=x.y.z".
4+
var Version = "0.5.0"

0 commit comments

Comments
 (0)