From f7b8076a846b4f1fb908fe4b0a16b0911c753503 Mon Sep 17 00:00:00 2001 From: Haitao Pan Date: Wed, 22 Apr 2026 12:28:16 +0800 Subject: [PATCH] add traced bridge version output --- Dockerfile | 7 +++- main.go | 14 +++++--- main_test.go | 41 +++++++++++++++++------- scripts/build-helper.sh | 4 ++- scripts/github-actions/build-artifact.sh | 5 ++- 5 files changed, 51 insertions(+), 20 deletions(-) diff --git a/Dockerfile b/Dockerfile index 1b4b3ca..7515be4 100644 --- a/Dockerfile +++ b/Dockerfile @@ -8,7 +8,12 @@ RUN go mod download COPY . . -RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags="-s -w" -o /out/xworkmate-bridge . +RUN set -euo pipefail; \ + build_commit="$(git rev-parse --short HEAD)"; \ + build_date="$(git log -1 --format=%cI)"; \ + CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build \ + -ldflags="-s -w -X main.buildCommit=${build_commit} -X main.buildVersion=v1.0-beta2 -X main.buildDate=${build_date}" \ + -o /out/xworkmate-bridge . # Stage 2 - minimal runtime image FROM debian:bookworm-slim diff --git a/main.go b/main.go index 39ad3d2..eb6043b 100644 --- a/main.go +++ b/main.go @@ -11,6 +11,12 @@ import ( "xworkmate-bridge/internal/toolbridge" ) +var ( + buildCommit = "" + buildVersion = "v1.0-beta2" + buildDate = "" +) + func main() { if len(os.Args) > 1 { switch os.Args[1] { @@ -52,13 +58,11 @@ func main() { } func printBridgeVersionInfo() error { - info := acp.ParseImageVersionInfo(os.Getenv("IMAGE")) payload := map[string]any{ "status": "ok", - "image": info.ImageRef, - "tag": info.Tag, - "commit": info.Commit, - "version": info.Version, + "commit": buildCommit, + "version": buildVersion, + "build-date": buildDate, } encoded, err := json.Marshal(payload) if err != nil { diff --git a/main_test.go b/main_test.go index 088fa02..d2c5e87 100644 --- a/main_test.go +++ b/main_test.go @@ -133,7 +133,14 @@ func TestRunClaudeReviewSurfacesNonJSONStdout(t *testing.T) { } func TestPrintBridgeVersionInfoMatchesPingContract(t *testing.T) { - t.Setenv("IMAGE", "ghcr.io/x-evor/xworkmate-bridge:0123456789abcdef0123456789abcdef01234567") + buildCommit = "cfd19f6" + buildVersion = "v1.0-beta2" + buildDate = "2026-04-22T12:23:28+08:00" + t.Cleanup(func() { + buildCommit = "" + buildVersion = "v1.0-beta2" + buildDate = "" + }) output := captureStdout(t, printBridgeVersionInfo) @@ -144,25 +151,35 @@ func TestPrintBridgeVersionInfoMatchesPingContract(t *testing.T) { if payload["status"] != "ok" { t.Fatalf("expected status ok, got %#v", payload["status"]) } - if payload["image"] != "ghcr.io/x-evor/xworkmate-bridge:0123456789abcdef0123456789abcdef01234567" { - t.Fatalf("unexpected image ref: %#v", payload["image"]) - } - if payload["tag"] != "0123456789abcdef0123456789abcdef01234567" { - t.Fatalf("unexpected tag: %#v", payload["tag"]) - } - if payload["commit"] != "0123456789abcdef0123456789abcdef01234567" { + if payload["commit"] != "cfd19f6" { t.Fatalf("unexpected commit: %#v", payload["commit"]) } - if payload["version"] != "0123456789abcdef0123456789abcdef01234567" { + if payload["version"] != "v1.0-beta2" { t.Fatalf("unexpected version: %#v", payload["version"]) } + if payload["build-date"] != "2026-04-22T12:23:28+08:00" { + t.Fatalf("unexpected build-date: %#v", payload["build-date"]) + } } -func TestPrintBridgeVersionInfoWithoutImageEnv(t *testing.T) { - t.Setenv("IMAGE", "") +func TestPrintBridgeVersionInfoUsesBuildVariables(t *testing.T) { + buildCommit = "deadbee" + buildVersion = "v1.0-beta2" + buildDate = "2026-04-01T01:02:03+08:00" + t.Cleanup(func() { + buildCommit = "" + buildVersion = "v1.0-beta2" + buildDate = "" + }) output := captureStdout(t, printBridgeVersionInfo) - if !strings.Contains(output, `"status":"ok"`) { + if !strings.Contains(output, `"commit":"deadbee"`) { + t.Fatalf("unexpected output: %q", output) + } + if !strings.Contains(output, `"version":"v1.0-beta2"`) { + t.Fatalf("unexpected output: %q", output) + } + if !strings.Contains(output, `"build-date":"2026-04-01T01:02:03+08:00"`) { t.Fatalf("unexpected output: %q", output) } } diff --git a/scripts/build-helper.sh b/scripts/build-helper.sh index 2e07d40..ea084df 100755 --- a/scripts/build-helper.sh +++ b/scripts/build-helper.sh @@ -26,7 +26,9 @@ mkdir -p "$OUTPUT_DIR" echo "Building xworkmate-go-core from xworkmate-bridge..." ( cd "$ROOT_DIR" - GO111MODULE=on go build -o "$OUTPUT_PATH" . + build_commit="$(git rev-parse --short HEAD)" + build_date="$(git log -1 --format=%cI)" + GO111MODULE=on go build -ldflags "-X main.buildCommit=${build_commit} -X main.buildVersion=v1.0-beta2 -X main.buildDate=${build_date}" -o "$OUTPUT_PATH" . ) chmod +x "$OUTPUT_PATH" diff --git a/scripts/github-actions/build-artifact.sh b/scripts/github-actions/build-artifact.sh index 37389fa..052ade8 100644 --- a/scripts/github-actions/build-artifact.sh +++ b/scripts/github-actions/build-artifact.sh @@ -4,4 +4,7 @@ set -euo pipefail ARTIFACT_DIR="${1:-dist}" mkdir -p "${ARTIFACT_DIR}" -GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build -o "${ARTIFACT_DIR}/xworkmate-bridge" . +build_commit="$(git rev-parse --short HEAD)" +build_date="$(git log -1 --format=%cI)" + +GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build -ldflags "-X main.buildCommit=${build_commit} -X main.buildVersion=v1.0-beta2 -X main.buildDate=${build_date}" -o "${ARTIFACT_DIR}/xworkmate-bridge" .