Django 的發布流程¶
正式發布版本¶
自 1.0 版本以來,Django 的發布版本編號方式如下
版本編號形式為
A.B
或A.B.C
。A.B
是功能發布的版本號碼。每個版本大多與前一個版本向後相容。此規則的例外情況將在發布說明中列出。C
是修補程式發布的版本號碼,用於錯誤修復和安全性發布時遞增。這些發布版本將 100% 向後相容於前一個修補程式發布版本。唯一的例外是當安全或資料遺失問題無法在不破壞向後相容性的情況下修復時。如果發生這種情況,發布說明將提供詳細的升級說明。在新的功能發布版本之前,我們會發布 alpha、beta 和候選發布版本。這些版本的形式為
A.B alpha/beta/rc N
,表示版本A.B
的第N
個 alpha/beta/候選發布版本。
在 git 中,每個 Django 發布版本都會有一個標籤指示其版本號碼,並使用 Django 發布金鑰簽署。此外,每個發布系列都有自己的分支,稱為 stable/A.B.x
,並且錯誤修復/安全性發布將從這些分支發布。
如需更多有關 Django 專案如何為安全目的發布新版本的資訊,請參閱我們的安全性原則。
- 功能發布¶
功能發布(A.B、A.B+1 等)大約每八個月發生一次 – 詳細資訊請參閱發布流程。這些發布版本將包含新功能、對現有功能的改進等等。
- 修補程式發布¶
修補程式發布(A.B.C、A.B.C+1 等)將在需要時發布,以修復錯誤和/或安全性問題。
除非因安全原因或為了防止資料遺失而無法實現,否則這些發布版本將 100% 與相關的功能發布版本相容。因此,「我應該升級到最新的修補程式發布版本嗎?」的答案永遠是「是」。
- 長期支援版本¶
某些功能發布版本將被指定為長期支援 (LTS) 版本。這些發布版本將在保證的時間內(通常為三年)應用安全性和資料遺失修復。
請參閱下載頁面,以取得已被指定為長期支援的版本。
發布頻率¶
從 Django 2.0 開始,版本號碼將使用寬鬆形式的語意版本控制,使得每個 LTS 之後的版本都會遞增到下一個「點零」版本。例如:2.0、2.1、2.2 (LTS)、3.0、3.1、3.2 (LTS) 等。
SemVer 可以更容易地一目瞭然地看到版本之間的相容性。它也有助於預期何時會移除相容性墊片。它並非純粹形式的 SemVer,因為每個功能發布版本都將繼續有一些已記錄的向後不相容性,在這些情況下,不採用棄用路徑是不可能的或不值得的。此外,在 LTS 版本 (X.2) 中開始的棄用將在非點零版本 (Y.1) 中刪除,以符合我們至少保留兩個功能發布版本的棄用墊片策略。請繼續閱讀下一節以取得範例。
棄用策略¶
功能發布版本可能會棄用先前版本中的某些功能。如果某功能在功能發布版本 A.x 中被棄用,它將繼續在所有 A.x 版本中運作(適用於所有 x 版本),但會發出警告。棄用的功能將在 B.0 版本中移除,或者對於最後一個 A.x 功能發布版本中棄用的功能,則在 B.1 中移除,以確保棄用至少在 2 個功能發布版本中完成。
因此,舉例來說,如果我們決定在 Django 4.2 中開始棄用某個函數
Django 4.2 將包含該函數的向後相容複本,該複本將引發
RemovedInDjango51Warning
。Django 5.0(4.2 之後的版本)仍將包含該向後相容複本。
Django 5.1 將完全移除該功能。
預設情況下,警告是靜音的。您可以使用 python -Wd
選項開啟這些警告的顯示。
更通用的範例
X.0
X.1
X.2 LTS
Y.0:刪除在 X.0 和 X.1 中新增的棄用墊片。
Y.1:刪除在 X.2 中新增的棄用墊片。
Y.2 LTS:未刪除任何棄用墊片(雖然 Y.0 不再受支援,但第三方應用程式需要維持對 X.2 LTS 的回溯相容性,以簡化 LTS 到 LTS 的升級)。
Z.0:刪除在 Y.0 和 Y.1 中新增的棄用墊片。
另請參閱棄用功能指南。
支援的版本¶
在任何時間點,Django 的開發團隊都會支援一組不同程度的版本。請參閱下載頁面的支援版本章節,以了解每個版本的目前支援狀態。
目前開發分支
main
將取得需要進行非簡單重構的新功能和錯誤修復。應用於主分支的修補程式也必須應用於最後一個功能發布分支,以便在該功能系列的下一個修補程式發布版本中發布,當它們修復嚴重的問題時
安全性問題。
資料遺失錯誤。
當機錯誤。
最新穩定版本新功能中的主要功能錯誤。
在目前發布系列中引入的舊版本 Django 的回歸。
經驗法則是,對於一開始就會阻止發布的錯誤(發布阻礙),修復程式將會回溯到最後一個功能發布版本。
安全性修復和資料遺失錯誤將會應用於目前的主分支、最後兩個功能發布分支,以及任何其他支援的長期支援發布分支。
文件修復通常會更自由地回溯到最後一個發布分支。這是因為讓最後一個發布版本的文件保持最新和正確非常有益,而且引入回歸的風險要小得多。
作為一個具體範例,請考慮介於 Django 5.1 和 5.2 發布之間的時間點。在這一點
功能將會新增至開發主分支,並作為 Django 5.2 發布。
嚴重的錯誤修復將會應用於
stable/5.1.x
分支,並作為 5.1.1、5.1.2 等發布。安全性修復和資料遺失問題的錯誤修復將會應用於
main
以及stable/5.1.x
、stable/5.0.x
和stable/4.2.x
(LTS) 分支。它們將會觸發5.1.1
、5.0.5
、4.2.8
等版本的發布。文件修復將會應用於主分支,如果可以輕鬆回溯,則會應用於最新的穩定分支
5.1.x
。
發布流程¶
Django 使用基於時間的發布排程,大約每八個月發布一次功能。
在每次功能發布之後,發布管理員將宣布下一個功能發布的時間表。
發布週期¶
每個發布週期都包含三個部分
第一階段:功能提案¶
發布流程的第一階段將包含確定下一個版本中要包含的主要功能。這應包含大量關於這些功能的初步工作 – 可運作的程式碼勝過宏偉的設計。
即將發布版本的主要功能將會新增至維基路線圖頁面,例如https://code.djangoproject.com/wiki/Version1.11Roadmap。
第二階段:開發¶
發布排程的第二部分是「埋頭苦幹」的工作期間。使用在第一階段結束時產生的路線圖,我們將竭盡全力完成路線圖上的所有事項。
在第二階段結束時,任何未完成的功能都將延遲到下一個版本。
第二階段將在 alpha 版本達到頂峰。在這一點,stable/A.B.x
分支將從 main
分叉。
第三階段:錯誤修復¶
發布週期的最後階段會花費在修復錯誤上——這段時間不會接受任何新功能。我們將嘗試在 alpha 版本發布一個月後發布 beta 版本,並在 beta 版本發布一個月後發布候選版本。
候選版本標誌著字串凍結,它會在最終版本發布前至少兩週發生。在此之後,不得加入新的可翻譯字串。
在此階段,合併將會越來越保守地進行回溯移植,以避免引入回歸錯誤。在候選版本發布後,只應回溯移植發布阻礙器和文件修復。
在此階段的同時,main
分支可以接收新功能,這些新功能將在 A.B+1
週期中發布。
錯誤修復版本¶
在功能版本發布後(例如 A.B),之前的版本將進入錯誤修復模式。
先前功能版本的相關分支(例如 stable/A.B-1.x
)將包含錯誤修復。在 main 分支上修復的關鍵錯誤,也必須*同時*在錯誤修復分支上修復;這表示提交必須明確地將錯誤修復與功能新增分開。將修復提交至 main 分支的開發人員,有責任也將修復應用於當前的錯誤修復分支。