From b94994936785a667a9b3e259d8dd9134c7b600e6 Mon Sep 17 00:00:00 2001 From: Rongsong Shen Date: Fri, 21 Aug 2026 06:06:05 +0000 Subject: [PATCH] feat(dirty-content-fingerprint): go_build injects fingerprint via ldflags go_build now reads XCE_DIRTY_FINGERPRINT (empty-safe) and appends -X main.DirtyFingerprint=... to its existing -ldflags construction, falling back to plain empty string when unset -- deliberately NOT the "unknown" fallback GitCommit/BuildTime use, matching dirty_fingerprint's empty-means-nothing-to-show convention everywhere else in this feature. Existing GitCommit/BuildTime fallback logic is completely untouched. Verified independently by review with real scratch Go builds traced via bash -x: unset -> empty flag value (not fabricated); set -> exact value carried through; all-unset -> GitCommit/BuildTime still fall back to "unknown" while DirtyFingerprint stays empty, confirming the two conventions coexist without interference. Co-Authored-By: Claude Sonnet 5 --- .kiro/specs/dirty-content-fingerprint/tasks.md | 6 +++--- src/tools/go_build | 7 ++++++- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/.kiro/specs/dirty-content-fingerprint/tasks.md b/.kiro/specs/dirty-content-fingerprint/tasks.md index 8d1e49fc..93dc1f8a 100644 --- a/.kiro/specs/dirty-content-fingerprint/tasks.md +++ b/.kiro/specs/dirty-content-fingerprint/tasks.md @@ -41,9 +41,9 @@ - _Depends: 3.1_ - [ ] 4. Core: Go binary --version/-version fingerprint display -- [ ] 4.1 go_build injects the fingerprint via ldflags - - `src/tools/go_build` reads `XCE_DIRTY_FINGERPRINT` (empty-safe) and appends `-X main.DirtyFingerprint=...` to its existing `-ldflags` construction, falling back to empty when unset - - Observable: invoking `go_build` with the env var unset still produces a working binary whose injected `DirtyFingerprint` var reads empty (not a fabricated value) +- [x] 4.1 go_build injects the fingerprint via ldflags + - `go_build` reads `XCE_DIRTY_FINGERPRINT` (empty-safe) and appends `-X main.DirtyFingerprint=...` to the existing `-ldflags` construction; falls back to plain empty string (deliberately NOT `"unknown"`, unlike `GitCommit`/`BuildTime`), matching `dirty_fingerprint`'s convention everywhere else in this feature; the existing `GitCommit`/`BuildTime` `unknown`-fallback logic is completely untouched + - Observable confirmed live (independently re-verified by review, real scratch Go builds traced via `bash -x`): fingerprint unset -> `-X main.DirtyFingerprint=` empty, binary confirms empty (not fabricated); fingerprint set -> flag carries the exact value; all three vars unset -> `GitCommit`/`BuildTime` still fall back to `unknown`, `DirtyFingerprint` stays empty, the two fallback conventions coexist without interference - _Requirements: 1.1, 5.1_ - _Boundary: go_build script_ diff --git a/src/tools/go_build b/src/tools/go_build index 7edaaaed..562cd6fb 100755 --- a/src/tools/go_build +++ b/src/tools/go_build @@ -101,6 +101,7 @@ export GOPROXY=https://goproxy.cn _git_commit="$XCE_GIT_COMMIT" _build_time="$XCE_BUILD_TIME" +_dirty_fingerprint="$XCE_DIRTY_FINGERPRINT" if [ -z "$_git_commit" ]; then _git_commit=unknown @@ -110,4 +111,8 @@ if [ -z "$_build_time" ]; then _build_time=unknown fi -(cd $_sdir; go build -gcflags "all=-N -l" -ldflags "-X main.GitCommit=$_git_commit -X main.BuildTime=$_build_time" -o "$_dfile" "$_sfile") +if [ -z "$_dirty_fingerprint" ]; then + _dirty_fingerprint="" +fi + +(cd $_sdir; go build -gcflags "all=-N -l" -ldflags "-X main.GitCommit=$_git_commit -X main.BuildTime=$_build_time -X main.DirtyFingerprint=$_dirty_fingerprint" -o "$_dfile" "$_sfile")