Closed
bug(cli): gc version shows dev/none/unknown when installed via go build #169
huqiAdd on  Apr 27Closed at  May 1
huqi
huqi
Apr 27 Create

验证记录

  • 当前版本或分支: main (本地最新)
  • 复现命令: go build -o gc ./cmd/gc && ./gc version
  • 实际结果: gc version dev / commit: none / built: unknown
  • 结论: 继续修复

问题描述

按 README 推荐的 go build -o gc ./cmd/gc 安装后,gc version 永远显示:

gc version dev
  commit: none
  built:  unknown

用户无法通过 gc version 确认实际安装的版本或 commit。

根因分析

cmd/gc/main.go:12-14 中版本信息为硬编码默认值:

var (
    version = "dev"
    commit  = "none"
    date    = "unknown"
)

版本注入依赖 Makefile 的 -ldflags:

LDFLAGS := -ldflags "-s -w -X main.version=$(VERSION) -X main.commit=$(COMMIT) -X main.date=$(DATE)"

只有 make build 才会注入,而 README 直接教用户用 go build。

影响

  • 按文档安装的用户无法确认实际版本
  • 问题排查时无法通过 gc version 获取 commit 信息
  • 与 GitHub CLI (gh) 等竞品相比,安装体验不一致

建议修复方向

  1. 文档修复: README 的安装说明改为 make build 或提供带 -ldflags 的完整 go build 命令
  2. 代码增强: 在 main.go 中尝试从 debug.ReadBuildInfo() 提取版本信息(当 -ldflags 未注入时)
  3. 两者兼顾: 文档校准 + 代码兜底

环境

  • OS: 任意平台
  • Go: 1.22+
  • 复现率: 100%(通过 go build 安装时)
likedislike
AaflyingtoCollaborators
Apr 27 Associated milestone: 2026-04 Open Issue Priority Plan
AaflyingtoCollaborators
May 1 Added label: status/in-progressstatus/verified
AaflyingtoCollaborators
May 1 Associated pull request
AaflyingtoCollaborators
May 1 Close issue
AaflyingtoCollaborators
May 4 Added label: risk/mediumscope/corestatus/self-checked