Go Wiki: Go-發佈週期

此 wiki 頁面由 Go 團隊維護。請 將意見寄送至 golang-dev提出問題,而非直接修改。

簡短連結:https://go.dev.org.tw/s/release

概觀

Go 每六個月釋出一個版本。每個發佈週期分為為期約 4 個月的開發階段,接著是稱為發佈凍結期的 3 個月測試和潤飾期。如果一切順利,下一版本的開發工作會在先前的版本發佈前開始,導致約一個月的重疊期。

在版本初次發佈後,會提供次要版本來修正嚴重錯誤和安全性問題。

時程表

目前的發佈週期對齊於每年 1 月中旬和 7 月中旬開始。發佈週期的目標里程碑如下所述。我們盡可能貼近目標,同時仍提供高品質的版本。

為了讓團隊有時間準備並解決預想不到的問題,我們偏好在週初或週中進行發佈工作。這表示確切的日期會根據不同的年份而有所不同,因此里程碑會以特定月份的星期數指定。第 1 週是從該月份的第一個星期一開始的那個星期。所有日期可能會根據該年的假日時間而變動。

release

1 月/7 月第 1 週:開始規劃發佈。

即將來臨的發行週期間的主要工作規劃會公告在 golang-dev 上。

範例:Go 1.20

一月 / 七月第 3 週:發行工作開始。

先前版本進入最後穩定階段後,開放此分支進行一般開發。此期間歡迎各種開發。建議重大或特別有風險的變更在開發視窗結束前夠早送出,這樣才有時間修正相關問題。

五月 / 十一月第 4 週:發行凍結開始。

此里程碑開始發行週期的第二部分,發行凍結。發行凍結適用於整個主要儲存庫,以及子儲存庫中用於建置發行版二進位檔所需的程式碼,特別是 vet 和 tools 子儲存庫中所有相關程式碼。

凍結期間僅接受錯誤修正、僅測試變更和文件更新。偶爾凍結期間可能會執行新工作,但僅限於特殊情況,而且通常僅限於在截止時間前提出並通過的工作。這些變更必須低風險。請參閱下列凍結例外

發行週期的這一部分專注於透過測試及修正找到的錯誤來提升發行品質。但是,必須評估每個修正來平衡可能修正的好處與現在發行版中測試不足的程式碼(修正)的成本。在發行週期初期,傾向於接受修正。在發行週期後期,傾向於拒絕修正,除非有案例證明修正風險低且報酬高。

風險低適合在週期後期變更的範例包括文件變更以及針對目前發行版中引入的新功能所做的修正(由於不可能與較早前的發行版進行比較,因此不會產生回歸情況)。

凍結開始後不久,幾乎所有已知的錯誤都已經修正或明確遞延(遞延到下一個發行版或無限期)。其餘錯誤通常應該追蹤為發行阻礙,並緊急處理。

六月 / 十二月第 2 週:發行候選版本 1 發布。

版本候選候選的用意是儘可能貼近實際發行的組建。發布版本候選表示 Go 團隊高度確信此樹狀結構不會出現重大錯誤。特別是,由於 Google 會持續追蹤 Go 的開發版本,因此在版本候選發行時,類似的版本應已在 Google 執行一段時間(至少一週或兩週)。

一旦發布版本候選,僅應進行文件變更和針對重大錯誤變更。一般而言,此時錯誤修正的門檻會比次要版本中錯誤修正的門檻稍高。我們可能會優先發布具有已知但極為罕見的崩潰性錯誤的版本,而不是發布具有新修正但未經實際測試的版本。

如果回報並修正了重大錯誤,可能會發布其他版本候選,但通常每隔兩週才會發布一個候選。

再次強調,版本候選的目的是儘可能沒有錯誤。建議所有組織在進行適當的特定組織測試後,將其部署在實務設定中。

版本候選與最終版本間的冷靜期很適合進行其他測試或討論下一個版本(請參閱上方的規劃里程碑)。

7 月/1 月第 3 週:開始製作下個版本

在穩定目前的版本時,樹狀結構重新開放,可以開始製作下一個版本。在此期間,供目前版本修補的修正需要選擇性回錄到發佈分支。與選擇性回錄次要版本不同,這些變更不需要回溯問題,也不需要獲得發佈團隊的核准。只要凍結政策允許,便能像一般提交清單 (CL) 一樣檢閱並提交變更。

8 月/2 月第 2 週:發行版本。

最後,發行版本!

版本不應包含自上次版本候選以來的重大變更:所有發行版本中的程式碼都經過徹底測試非常重要。發布版本表示發布測試已確認版本候選高度確信此樹狀結構不會出現重大錯誤。

即使版本順利發行且有充裕時間,我們仍希望能照時程進行。額外測試只能讓發行的穩定度提升,也能讓處理 Go 發行的開發人員在程式碼變更再次湧入前有更多時間構思並規劃下個版本。

在正式發布時,Google 已使用此版本的 Go 已將近兩個月。儘管 Google 的成功使用並不能保證沒有問題,但我們的經驗是它肯定有助於提升發行的品質。我們強烈鼓勵其他組織盡可能積極地測試候選版本,並回報他們發現的問題。

一旦一個版本穩定後,就可以開始著手進行下一個版本的開發,包括代碼檢閱和提交新代碼,然後循環重複。請注意,如果一個版本延後,下一個版本的開發也可能會延後。

版本維護

發行次要版本,旨在解決一個或多個沒有解決方法的重大問題(通常與穩定性或安全性相關)。此版本包含的唯一代碼變更是針對特定重大問題的修正。也可能包含重要的僅文件變更和安全的測試更新(例如停用測試),但不會包含更多。次要版本儘可能地維持向後相容性,且不會引入新的 API。

在 Go 1.x+2 發行後,修正問題(包括安全性問題)的次要版本的發行將停止。更多有關安全性更新的資訊,請參閱安全性政策

另請參閱次要版本發布Wiki 頁面。

凍結例外

符合凍結政策的修正 CL 無需凍結例外。

任何凍結例外都必須在凍結前傳達到 Go 發行團隊並得到明確批准。如果你想要要求例外,請在議題追蹤系統中建檔一個議題,並加上 “[凍結例外]” 作為字尾,並加上 “CC @golang/release”(範例)。我們將根據具體情況處理任何請求,且強烈偏好不要在凍結後允許進行變更。

歷史備註

在 2016 年的 Go 1.7 發行中,我們最初採用了一個開發時程較短的版本表的版本。在經過艱難地歷經多年發行、測試和程序改善後的 2022 年和 2023 年,讓我們有機會及時發行 1.19。對於 1.20,我們延長了開發時程,並將凍結時間延後、解凍時間提前。這些變更在 1.21 發行時正式實施。我們預計將持續準時發行。


此內容是Go Wiki的一部分。