add traced bridge version output

This commit is contained in:
Haitao Pan 2026-04-22 12:28:16 +08:00
parent cfd19f6626
commit f7b8076a84
5 changed files with 51 additions and 20 deletions

View File

@ -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

14
main.go
View File

@ -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 {

View File

@ -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)
}
}

View File

@ -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"

View File

@ -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" .