Verificare le versioni plugin e tema per installazioni Discourse più vecchie (.discourse-compatibility)

:open_book: Background

A volte i temi/plugin devono apportare modifiche compatibili solo con l’ultima versione di Discourse. In tal caso, le versioni precedenti di Discourse possono essere istruite a utilizzare una versione ‘fissata’ più vecchia del plugin.

Ciò si ottiene utilizzando un file .discourse-compatibility nella directory principale di un repository di temi/plugin. È un file YAML in cui le chiavi specificano la versione principale di Discourse e i valori rappresentano la versione associata del tuo tema/plugin.

Le versioni principali di Discourse possono essere specificate utilizzando gli operatori <= e <. <= è l’impostazione predefinita per motivi storici, ma in generale ha più senso usare <.

:pushpin: Fissare la versione di un tema/plugin

Ad esempio, se il core di Discourse apporta una modifica durante 3.2.0.beta2-dev (trovato in version.rb) e il tuo plugin/tema inizia a dipenderne, aggiungerai una voce al file .discourse-compatibility in questo modo:

< 3.2.0.beta2-dev: abcde

dove abcde è un riferimento all’hash del commit ‘legacy’ DEL TUO PLUGIN che dovrebbe essere utilizzato sulle versioni precedenti di Discourse.

Ora chiunque utilizzi una versione precedente di Discourse (ad es. 3.2.0.beta1 o 3.1.4) utilizzerà la versione abcde del tuo tema/plugin. Chiunque utilizzi 3.2.0.beta2-dev o versioni successive continuerà a utilizzare l’ultima versione.

:clipboard: Voci multiple

Nel tempo, puoi aggiungere più righe al file .discourse-compatibility. Discourse sceglierà sempre la specifica ‘più bassa’ che corrisponde alla versione principale corrente di Discourse. L’ordine delle righe nel file non ha tecnicamente importanza, ma consigliamo di mettere le voci più recenti in cima.

:git_merged: ‘Backporting’ delle modifiche per le vecchie versioni di Discourse

Immaginiamo un file .discourse-compatibility come questo, con due diverse specifiche di versione fissate a commit specifici del plugin:

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

Se hai bisogno di ‘backportare’ una modifica a Discourse 3.1, faresti qualcosa del genere:

  1. Crea un branch dal vecchio commit (git checkout -b my_branch_name commithashfordiscourse31)

  2. Esegui il commit della tua modifica e pusha sull’origine. Se utilizzi le funzionalità di protezione dei branch di GitHub, potresti voler proteggere questo branch da eliminazioni accidentali

  3. Aggiorna il file .discourse-compatibility sul branch principale in modo che punti ora al tuo nuovo commit sul branch di supporto 3.1

:globe_showing_europe_africa: Esempio reale

Ecco un file .discourse-compatibility reale dal plugin discourse-solved. Nota che, al momento della scrittura, utilizza ancora la sintassi ‘legacy’ senza operatori < o <= espliciti. Pertanto, ogni riga viene interpretata automaticamente come <=.


Questo documento è controllato in versione - suggerisci modifiche su github.

17 Mi Piace

Se la versione è \u003c 3.5.0.beta8-dev, includerebbe 3.5.0?

No. 3.5.0 è considerato “superiore” alla versione prerelease “3.5.0.beta8-dev”.

Puoi sempre provare i confronti su una console ruby:

> Gem::Version.new("3.5.0") < Gem::Version.new("3.5.0.beta8-dev")
=> false
5 Mi Piace

Capito. Grazie per la spiegazione!

1 Mi Piace