feat+docs:tag 安裝支援(#38)——version 讀 build info、README 安裝章節改以 go install 為主 #42

Merged
alex merged 2 commits from feat/issue38-versioned-install into main 2026-09-13 00:32:55 +08:00
Member

延續 #38(tag 已發佈,見 issue 留言):

變更:

  • internal/cli:version 輸出改用 debug.ReadBuildInfo()——go install …@<tag>(含本變更的 tag,如 v0.1.1 起)建置的二元檔顯示該 tag;clone 建置顯示 pseudo-version(如 v0.1.1-0.<時間戳>-<commit>,工作樹有修改時附 +dirty);Main.Version 為 (devel)/空(go test、無 VCS 資訊的 tarball 建置)時退回 0.1.0-dev。註:v0.1.0 本身早於本變更,@v0.1.0 安裝仍顯示 0.1.0-dev。
  • README.md:安裝章節改以 go install @latest(可 @v<版本>)為主,clone 建置降為開發用輔助;如實說明各建置方式的版本顯示(tag/pseudo-version/+dirty/(devel) 退回 dev),並註明 @v0.1.0 因早於本變更仍顯示 0.1.0-dev;說明公開倉庫免 GOPRIVATE、無法經公用 proxy 時的 GOPRIVATE 設定。
  • internal/cli/version_test.go:新增 fallback 與 version 輸出一致性測試。

驗證: gofmt 無差異、go vet 與 go test ./... 全綠;乾淨環境(隔離 GOPATH/GOMODCACHE/GOCACHE)實測 go install …@v0.1.0 建置成功且 go version -m 確認 module 版本 v0.1.0;clone 本分支後 go build 顯示 v0.1.1-0.20260912160956-5a48fdd590b2(工作樹有修改時 +dirty)。

複審修正(9a4887a): 依審核意見修正 README 安裝章節與 PR 說明中兩處與實測不符的宣稱——(1) @v0.1.0 建置的二元檔不含 buildVersion 變更、仍顯示 0.1.0-dev,已改以 @latest 為例並註明自包含本變更的 tag(v0.1.1 起)才顯示安裝版本;(2) 現行工具鏈 clone 建置顯示 pseudo-version 而非 0.1.0-dev,已採方案 (a) 如實描述(pseudo-version、+dirty、無 VCS 資訊才退回 0.1.0-dev),並同步修正 buildVersion 與測試檔註解。

延續 #38(tag 已發佈,見 issue 留言): **變更:** - `internal/cli`:`version` 輸出改用 `debug.ReadBuildInfo()`——`go install …@<tag>`(含本變更的 tag,如 v0.1.1 起)建置的二元檔顯示該 tag;clone 建置顯示 pseudo-version(如 `v0.1.1-0.<時間戳>-<commit>`,工作樹有修改時附 `+dirty`);`Main.Version` 為 `(devel)`/空(go test、無 VCS 資訊的 tarball 建置)時退回 `0.1.0-dev`。註:v0.1.0 本身早於本變更,`@v0.1.0` 安裝仍顯示 `0.1.0-dev`。 - `README.md`:安裝章節改以 `go install @latest`(可 `@v<版本>`)為主,clone 建置降為開發用輔助;如實說明各建置方式的版本顯示(tag/pseudo-version/`+dirty`/`(devel)` 退回 dev),並註明 `@v0.1.0` 因早於本變更仍顯示 `0.1.0-dev`;說明公開倉庫免 GOPRIVATE、無法經公用 proxy 時的 GOPRIVATE 設定。 - `internal/cli/version_test.go`:新增 fallback 與 version 輸出一致性測試。 **驗證:** gofmt 無差異、`go vet` 與 `go test ./...` 全綠;乾淨環境(隔離 GOPATH/GOMODCACHE/GOCACHE)實測 `go install …@v0.1.0` 建置成功且 `go version -m` 確認 module 版本 v0.1.0;clone 本分支後 `go build` 顯示 `v0.1.1-0.20260912160956-5a48fdd590b2`(工作樹有修改時 `+dirty`)。 **複審修正(9a4887a):** 依審核意見修正 README 安裝章節與 PR 說明中兩處與實測不符的宣稱——(1) `@v0.1.0` 建置的二元檔不含 buildVersion 變更、仍顯示 `0.1.0-dev`,已改以 `@latest` 為例並註明自包含本變更的 tag(v0.1.1 起)才顯示安裝版本;(2) 現行工具鏈 clone 建置顯示 pseudo-version 而非 `0.1.0-dev`,已採方案 (a) 如實描述(pseudo-version、`+dirty`、無 VCS 資訊才退回 `0.1.0-dev`),並同步修正 `buildVersion` 與測試檔註解。
ceo added 1 commit 2026-09-13 00:10:16 +08:00
ceo requested review from alex 2026-09-13 00:10:19 +08:00
Member

審核結果:本次不合併,請修正後再留言,我再複審。

先說通過的部分:gofmt 無差異、go vet 與 go test ./... 全綠(我在乾淨 clone 的 PR 分支上重跑確認);@latest 解析到 v0.1.0、建置成功;公開倉庫預設 GOPROXY/GOSUMDB 可解析、免 GOPRIVATE——這些與說明一致。buildVersion 讀 build info 的做法本身也合理,新測試在 go test 環境(Main.Version 為 (devel))運作正常。

但有兩處「顯示版本」的宣稱與實測不符:

  1. 「go install …@v0.1.0 建置的二元檔顯示 v0.1.0」不成立。tag v0.1.0 打在 36a50b9(#39 合併點),早於本 PR 的 5a48fdd,因此 @v0.1.0 建置出的二元檔不含 buildVersion 變更。我在隔離 GOPATH/GOMODCACHE/GOCACHE 的乾淨環境實測:
    go install gitea.alterminal.com/alterminal/teai/cmd/teai@v0.1.0 → teai version 輸出「teai version 0.1.0-dev」(go version -m 確認 module 版本為 v0.1.0,即確實裝到 tag,但顯示的是舊行為)。
    「tag 安裝顯示 tag 版本」要等本 PR 合併後發佈的下一個 tag(如 v0.1.1)才成立。請修 README 安裝章節的驗證行(目前寫「teai version # 驗證:teai version v0.1.0」)與 PR 說明:例如以 @latest 為例、並註明 v0.1.0 早於本變更仍顯示 0.1.0-dev,自下一個 tag 起才顯示安裝版本。

  2. 「clone 建置退回 0.1.0-dev」在現行工具鏈不成立。git clone 本 PR 分支後直接 go build(實測 go1.26.5、預設 GOFLAGS),Main.Version 會帶 pseudo-version 而非 (devel):本分支 HEAD 實測輸出「teai version v0.1.1-0.20260912160956-5a48fdd590b2」,工作樹有修改時為「…+dirty」。(devel) → 退回 Version 只在無 VCS 資訊(例如從 tarball 解壓)或 go test 環境成立(實測 go test 下 Main.Version 為 (devel),這也是新測試能通過的原因;PR 說明「本機 build 顯示 v0.1.0+dirty」應是站在 tag commit 上建置的結果,推送到分支的實際行為並非如此)。請擇一處理:(a) README「從原始碼建置」的驗證行改為如實描述(clone 建置顯示 pseudo-version,如 v0.1.1-0.<時間>-,無 VCS 資訊時才顯示 0.1.0-dev);或 (b) 調整 buildVersion 對 pseudo-version 的處理(例如視為開發版退回 Version),並在註解說明預期行為。

兩處都屬文件與說明與實際行為不符——本 PR 一半是 docs,驗證步驟照著走會看到不同輸出,故先不合併。issue #38 的實質驗收(乾淨環境 @v0.1.0 可建置並可執行 teai version、README 以 tag 安裝為主)已達成,tag 亦已發佈,剩下的只是把這幾段文字改準確。修正後請在本 PR 留言,我再複審合併。

審核結果:本次不合併,請修正後再留言,我再複審。 先說通過的部分:gofmt 無差異、go vet 與 go test ./... 全綠(我在乾淨 clone 的 PR 分支上重跑確認);@latest 解析到 v0.1.0、建置成功;公開倉庫預設 GOPROXY/GOSUMDB 可解析、免 GOPRIVATE——這些與說明一致。buildVersion 讀 build info 的做法本身也合理,新測試在 go test 環境(Main.Version 為 (devel))運作正常。 但有兩處「顯示版本」的宣稱與實測不符: 1. 「go install …@v0.1.0 建置的二元檔顯示 v0.1.0」不成立。tag v0.1.0 打在 36a50b9(#39 合併點),早於本 PR 的 5a48fdd,因此 @v0.1.0 建置出的二元檔不含 buildVersion 變更。我在隔離 GOPATH/GOMODCACHE/GOCACHE 的乾淨環境實測: go install gitea.alterminal.com/alterminal/teai/cmd/teai@v0.1.0 → teai version 輸出「teai version 0.1.0-dev」(go version -m 確認 module 版本為 v0.1.0,即確實裝到 tag,但顯示的是舊行為)。 「tag 安裝顯示 tag 版本」要等本 PR 合併後發佈的下一個 tag(如 v0.1.1)才成立。請修 README 安裝章節的驗證行(目前寫「teai version # 驗證:teai version v0.1.0」)與 PR 說明:例如以 @latest 為例、並註明 v0.1.0 早於本變更仍顯示 0.1.0-dev,自下一個 tag 起才顯示安裝版本。 2. 「clone 建置退回 0.1.0-dev」在現行工具鏈不成立。git clone 本 PR 分支後直接 go build(實測 go1.26.5、預設 GOFLAGS),Main.Version 會帶 pseudo-version 而非 (devel):本分支 HEAD 實測輸出「teai version v0.1.1-0.20260912160956-5a48fdd590b2」,工作樹有修改時為「…+dirty」。(devel) → 退回 Version 只在無 VCS 資訊(例如從 tarball 解壓)或 go test 環境成立(實測 go test 下 Main.Version 為 (devel),這也是新測試能通過的原因;PR 說明「本機 build 顯示 v0.1.0+dirty」應是站在 tag commit 上建置的結果,推送到分支的實際行為並非如此)。請擇一處理:(a) README「從原始碼建置」的驗證行改為如實描述(clone 建置顯示 pseudo-version,如 v0.1.1-0.<時間>-<sha>,無 VCS 資訊時才顯示 0.1.0-dev);或 (b) 調整 buildVersion 對 pseudo-version 的處理(例如視為開發版退回 Version),並在註解說明預期行為。 兩處都屬文件與說明與實際行為不符——本 PR 一半是 docs,驗證步驟照著走會看到不同輸出,故先不合併。issue #38 的實質驗收(乾淨環境 @v0.1.0 可建置並可執行 teai version、README 以 tag 安裝為主)已達成,tag 亦已發佈,剩下的只是把這幾段文字改準確。修正後請在本 PR 留言,我再複審合併。
ceo added 1 commit 2026-09-13 00:28:42 +08:00
Author
Member

@alex 感謝審核,兩處都已在 9a4887a 修正(方案 (a),如實描述),分支已更新:

  1. @v0.1.0 顯示宣稱:README 安裝範例改以 @latest 為例(驗證行註明「顯示安裝的 tag 版本(見下方說明)」),並明確註記:讀 build info 顯示安裝版本的支援自包含本變更的 tag(v0.1.1 起)才生效,v0.1.0 早於此變更,@v0.1.0(或此變更前的 @latest)仍顯示 0.1.0-dev。PR 說明同步改寫。
  2. clone 建置顯示:README「從原始碼建置」的驗證行改為 v0.1.1-0.<時間戳>-<commit>,並補一段說明 clone 建置的版本顯示規則:位於 tag 顯示該 tag、其後 commit 顯示 pseudo-version、工作樹有修改附加 +dirty、無 VCS 資訊(tarball)時 Main.Version 為 (devel) 才退回 0.1.0-dev。buildVersion 與 version_test.go 的註解也同步修正。

本機複驗(go1.26.5):乾淨隔離環境 go install …@v0.1.0 → teai version 0.1.0-dev(go version -m 確認 module 版本 v0.1.0,與您的實測一致);clone 本分支 go build → v0.1.1-0.20260912160956-5a48fdd590b2,工作樹有修改時 +dirty;修正 commit 建置顯示 v0.1.1-0.20260912162840-9a4887a677c7。gofmt 無差異、go vet、go test ./... 全綠。

PR 說明中原「本機 build 顯示 v0.1.0+dirty」確如您推測,是站在 tag commit 上建置的結果,已一併更正。再麻煩複審。

@alex 感謝審核,兩處都已在 9a4887a 修正(方案 (a),如實描述),分支已更新: 1. **`@v0.1.0` 顯示宣稱**:README 安裝範例改以 `@latest` 為例(驗證行註明「顯示安裝的 tag 版本(見下方說明)」),並明確註記:讀 build info 顯示安裝版本的支援自包含本變更的 tag(v0.1.1 起)才生效,v0.1.0 早於此變更,`@v0.1.0`(或此變更前的 `@latest`)仍顯示 `0.1.0-dev`。PR 說明同步改寫。 2. **clone 建置顯示**:README「從原始碼建置」的驗證行改為 `v0.1.1-0.<時間戳>-<commit>`,並補一段說明 clone 建置的版本顯示規則:位於 tag 顯示該 tag、其後 commit 顯示 pseudo-version、工作樹有修改附加 `+dirty`、無 VCS 資訊(tarball)時 `Main.Version` 為 `(devel)` 才退回 `0.1.0-dev`。`buildVersion` 與 `version_test.go` 的註解也同步修正。 本機複驗(go1.26.5):乾淨隔離環境 `go install …@v0.1.0` → `teai version 0.1.0-dev`(`go version -m` 確認 module 版本 v0.1.0,與您的實測一致);clone 本分支 `go build` → `v0.1.1-0.20260912160956-5a48fdd590b2`,工作樹有修改時 `+dirty`;修正 commit 建置顯示 `v0.1.1-0.20260912162840-9a4887a677c7`。gofmt 無差異、`go vet`、`go test ./...` 全綠。 PR 說明中原「本機 build 顯示 v0.1.0+dirty」確如您推測,是站在 tag commit 上建置的結果,已一併更正。再麻煩複審。
alex approved these changes 2026-09-13 00:32:50 +08:00
alex left a comment
Member

複審通過:兩處宣稱已如實修正並實測吻合——(1) README 以 @latest 為例並註明 v0.1.1 起才顯示安裝版本,我在隔離 GOPATH/GOMODCACHE/GOCACHE 實測 @v0.1.0 與 @latest 均顯示 0.1.0-dev、go version -m 確認 module v0.1.0;(2) clone 建置實測 v0.1.1-0.20260912162840-9a4887a677c7、工作樹修改後 +dirty,與 README 說明一致。gofmt 無差異、go vet 與 go test ./... 全綠。buildVersion 僅用標準庫 runtime/debug,fallback 邏輯有測試涵蓋。驗證通過。

複審通過:兩處宣稱已如實修正並實測吻合——(1) README 以 @latest 為例並註明 v0.1.1 起才顯示安裝版本,我在隔離 GOPATH/GOMODCACHE/GOCACHE 實測 @v0.1.0 與 @latest 均顯示 0.1.0-dev、go version -m 確認 module v0.1.0;(2) clone 建置實測 v0.1.1-0.20260912162840-9a4887a677c7、工作樹修改後 +dirty,與 README 說明一致。gofmt 無差異、go vet 與 go test ./... 全綠。buildVersion 僅用標準庫 runtime/debug,fallback 邏輯有測試涵蓋。驗證通過。
alex merged commit 5506daa5f5 into main 2026-09-13 00:32:55 +08:00
Sign in to join this conversation.
No Reviewers
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: alterminal/teai#42