Discourse の新しいバージョン管理システムを導入する予定です。目標は、開発の勢いを維持しながら、コミュニティ管理者にさらに多くの選択肢と予測可能性を提供することです。また、他のソフトウェアとの連携を改善するために、いくつかの用語を調整します。
このドキュメントは、コメントを受け取り、システムの実装を開始し、新しいリリースストリームの使用を拡大するにつれて進化します。
この段階でコメントや提案があれば、このトピックに返信してお知らせください!
目標
- 開発速度と安定性のバランスをとる、より定期的な Discourse の「リリース」を導入する
- 長期間サポートされる約6ヶ月ごとのリリースを引き続き提供する
- 定期リリースと長期サポートリリースの両方を並行してサポートし、管理者がアップデートのタイミングについてより柔軟に対応できるようにしつつ、重要なセキュリティアップデートも引き続き受け取れるようにする
- 「リリース」に関する儀式を最小限に抑える。可能な限り自動化し、コア開発者のエクスペリエンスを低下させないようにする。ESR リリースは他のリリースと同じです。
- 名前と手順は業界標準に合わせ、開発者とエンドユーザーに説明しやすくする
全体概要
-
月に約1回のリリースをカットします。「メジャー」バージョンは現在の年、「マイナー」バージョンは各リリースでインクリメントされます。パッチバージョン番号は、バックポートされた修正ごとにインクリメントされます。
例:2026 年最初のリリースは
v2026.0、次はv2026.1などになります。リリースは、2つの完全なリリースサイクルで重要な修正を受け取ります。例:
2026.0のサポートは2026.2がリリースされるまで継続されます。 -
約6ヶ月ごとに、それらのリリースの中から 1 つを長期サポートリリース(ESR)として宣言します。ESR バージョンは、次の ESR が宣言された後、2 つのリリースまでサポートされます。
例:v2026.0 が ESR で、v2026.6 が次の ESR の場合、v2026.0 のサポートは v2026.8 がリリースされると終了します。月次ペースを仮定すると、ESR サポートの重複は 2 ヶ月になります。
-
latest、直近のリリース、前のリリース、およびアクティブな ESR バージョンに対して重要な修正を提供します。 -
tests-passedブランチをlatestにリネームします。
1 年間のサポート期間の例グラフ:
gantt
title Discourse Releases and Support Periods (Jan 2026 – Jan 2027)
dateFormat YYYY-MM-DD
axisFormat %b %Y
2026.0 (ESR) :active, 2026-01-27, 2026-09-29
2026.1 :done, 2026-02-24, 2026-04-28
2026.2 :done, 2026-03-31, 2026-05-26
2026.3 :done, 2026-04-28, 2026-06-30
2026.4 :done, 2026-05-26, 2026-07-28
2026.5 :done, 2026-06-30, 2026-08-25
2026.6 (ESR) :active, 2026-07-28, 2027-01-26
2026.7 :done, 2026-08-25, 2026-10-27
2026.8 :done, 2026-09-29, 2026-11-24
2026.9 :done, 2026-10-27, 2026-12-29
2026.10 :done, 2026-11-24, 2027-01-26
2026.11 :done, 2026-12-29, 2027-01-26
実装
-
各リリースは
latestからカットされたブランチを持ちます。これらは名前空間化され、無期限に保存されます。例:v2026.1はrelease/2026.1という名前のブランチを持ちます。 -
各パッチリリースはタグ付けされます。例:
v2026.1.0、v2026.1.1など。 -
最新リリースは
releaseタグ付けされます。最新の ESR はesrタグ付けされます。 -
前のリリースは
release-previousタグ付けされます。前のアクティブな ESR(もしあれば)はesr-previousタグ付けされます。 -
後方互換性のために、既存のリリースストリームと一致するタグは、最も近い新しい同等物にエイリアスされます。
stable→esr。beta→release。tests-passed→latest。これらは非推奨と見なされ、将来的には一部またはすべてを削除することを目指します。特に「beta」は、Discourse が本番環境に対応していないという印象を与えるため問題があります。
-
latestでは、バージョン番号は開発中のバージョンに-latestを付加したものになります。例:2026.3.0-latest
自動リリースプロセス
毎月、GitHub アクションが新しい PR を開き、main の version.rb を次の -latest バージョンに引き上げる単一コミットを含みます。
人間が PR をマージすると、別の GitHub アクションが main が次の -latest に移動したことを検出し、完了したリリースのブランチをカットします。基本的に、このブランチは「リリース候補」になります。別の自動 PR がリリースブランチに対して開き、version.rb から -latest サフィックスを削除して「リリース」します。
通常、これらの 2 つの PR はすぐにマージしますが、リリース作成と最終化のための別々の PR を持つことで、最終化前にブランチの問題に対処するオプションが得られます。
%%{init: { 'logLevel': 'debug', 'gitGraph': {'showBranches': true, 'showCommitLabel':true,'mainBranchOrder': 2}} }%%
gitGraph
checkout main
commit id:'version v2026.1-latest'
commit id:'...'
commit id:'....'
branch 'release/2026.1'
commit id:'version 2026.1'
checkout 'main'
commit id:'version v2026.2-latest'
別途、別の GitHub アクションワークフローが、リリースブランチへのバックポートされたコミットを監視します。それらが見つかると、そのブランチのパッチバージョンを引き上げる PR が生成されます。人間がそれらの PR をいつマージするかを決定できます。
これらのすべての自動化により、さまざまなタグ(release、release-previous、esr、esr-previous、および後方互換性エイリアス)が自動的に最新の状態に保たれます。
セキュリティ修正
セキュリティ修正ワークフローはほぼ同じですが、これらの 3 つの新しい場所のうち 2 つで修正を行う必要があります。
-
latest -
esr -
esr-previous
-
release
-
release-previous
(前の図によると、3 つのうち 2 つだけです。esr-previous はサポートされており、新しい esr は release または release-previous と同じであり、それが当てはまらなくなると esr-previous のサポートを削除するためです。)
latest にセキュリティ修正を導入すると、latest-security-fix タグがそのコミットに自動的に移動します。docker_manager はそのタグを監視するように更新され、管理者にアップデートを促します。これにより、バージョンの引き上げを急ぐことなく、セキュリティ修正をリリースし、通知することができます。
翻訳
現在、stable および tests-passed ブランチは CrowdIn で翻訳でき、結果は定期的に統合されています。新しいシステムでは、当初は latest および release を CrowdIn で翻訳できるようにする予定です。
理想的には、release が release-previous または esr になるまでに、翻訳は落ち着いているでしょう。それらのバージョンの継続的な翻訳の需要がある場合は、将来的に検討される可能性があります。
プラグイン/テーマの互換性
Discourse の latest ストリーム以外のストリームの使用を増やすと、discourse-compatibility システムへの依存度が高まります。そのため、互換性システムにいくつかの改善が必要です。
main 上の .discourse-compatibility ファイルを使用する代わりに、特別に名前が付けられたブランチ/タグに基づいた暗黙的な互換性をサポートできるようになります。これは、コミットハッシュを手動で調整するよりもはるかに簡単になるはずです。たとえば、プラグインには次のようなブランチを持たせることができます。
d-compat/v2026.1d-compat/v2026.2d-compat/v2026.3main(独自のブランチを持たない Discourse バージョンに使用)
プラグインをインストールする際、Discourse は現在のバージョンに一致するブランチをチェックできます。存在する場合は、それをチェックアウトします。存在しない場合は、.discourse-compatibility ファイルをチェックします。それ以外の場合は、デフォルトのブランチをチェックアウトします。
各テーマ/プラグインで毎日実行され、新しい Discourse リリースをチェックし、これらのブランチを自動的に作成する公開 GitHub アクションを作成できます。各テーマ/プラグインは、この自動ピン留めアクションを使用するか、より「フローティング」戦略を選択できます。
discourse.org ホスティング
当初、当社のホスティングサービスは引き続き Discourse の latest バージョンを実行します。将来的には、エンタープライズティアの顧客が「リリース」バージョンを選択できるオプションを検討します。
標準インストールのデフォルト
当初、デフォルトは latest のままです。管理者は、現在 stable をオプトインしているのと同じ方法で、新しいリリースストリームをオプトインできるようになります。システムがより成熟したら、将来的にリリースストリーム間の簡単な切り替えを検討する可能性があります。