古いDiscourseインストール用のプラグインとテーマのバージョンを固定する(.discourse-compatibility)

:open_book: 背景

テーマやプラグインによっては、Discourse の最新バージョンとのみ互換性のある変更が必要になる場合があります。その場合、古いバージョンの Discourse に対して、プラグインの古い「固定」バージョンを使用するように指示できます。

これは、テーマ/プラグイン リポジトリのルートにある .discourse-compatibility ファイルを使用して実現されます。これは YAML ファイルで、キーは Discourse コアのバージョンを指定し、値はテーマ/プラグインの関連バージョンを表します。

Discourse コアのバージョンは、<= および < 演算子を使用して指定できます。<= は、過去の理由によりデフォルトですが、一般的には < を使用する方が理にかなっています。

:pushpin: テーマ/プラグインのバージョンを固定する

たとえば、Discourse コアが 3.2.0.beta2-dev (version.rb にあります) で変更を行い、プラグイン/テーマがそれに依存し始めた場合、次のように .discourse-compatibility ファイルにエントリを追加します。

< 3.2.0.beta2-dev: abcde

ここで、abcde は、古いバージョンの Discourse で使用される YOUR PLUGIN の「レガシー」コミット ハッシュへの参照です。

これにより、古いバージョンの Discourse (例: 3.2.0.beta1 または 3.1.4) を使用しているユーザーは、プラグイン/テーマのバージョン abcde を使用します。3.2.0.beta2-dev 以上のユーザーは、引き続き最新バージョンを使用します。

:clipboard: 複数のエントリ

時間の経過とともに、.discourse-compatibility ファイルに複数の行を追加できます。Discourse は、現在の Discourse コアのバージョンに一致する「最も低い」仕様を常に選択します。ファイルの行の順序は技術的には重要ではありませんが、新しいエントリを上部に配置することをお勧めします。

:git_merged: 古い Discourse バージョンの変更を「バックポート」する

2 つの異なるバージョン仕様が特定のプラグイン コミットに固定されている、次のような .discourse-compatibility ファイルを想像してみましょう。

< 3.2.0.beta1-dev: commithashfordiscourse31
< 3.1.0.beta1-dev: commithashfordiscourse30

Discourse 3.1 に変更を「バックポート」する必要がある場合は、次のようなことを行います。

  1. 古いコミットからブランチを作成します (git checkout -b my_branch_name commithashfordiscourse31)

  2. 変更をコミットして origin にプッシュします。GitHub のブランチ保護機能を使用している場合は、このブランチが誤って削除されないように保護したい場合があります。

  3. .discourse-compatibility ファイルをメイン ブランチで更新して、3.1 サポート ブランチの新しいコミットを指すようにします。

:globe_showing_europe_africa: 実世界の例

これは、discourse-solved プラグインからの実際の .discourse-compatibility ファイルです。執筆時点では、これは明示的な < または <= 演算子を使用しない「レガシー」構文を使用していることに注意してください。したがって、各行は自動的に <= として解釈されます。


このドキュメントはバージョン管理されています - github で変更を提案してください。

「いいね!」 17

バージョンが 3.5.0.beta8-dev より小さい場合、3.5.0 は含まれますか?

No. 3.5.0 は、リリース候補版の「3.5.0.beta8-dev」よりも「大きい」と見なされます。

常に Ruby コンソールで比較を試すことができます。

> Gem::Version.new("3.5.0") < Gem::Version.new("3.5.0.beta8-dev")
=> false
「いいね!」 5

承知いたしました。説明ありがとうございます!

「いいね!」 1