Fissare le versioni di plugin e temi per installazioni Discourse più vecchie (.discourse-compatibility)

:open_book: Background

A volte i temi/plugin devono apportare modifiche compatibili solo con la versione più recente di Discourse. In quella situazione, le versioni precedenti di Discourse possono essere istruite a utilizzare una versione ‘bloccata’ (pinned) più vecchia del plugin.

Ciò si ottiene utilizzando un file .discourse-compatibility nella radice 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 ragioni storiche, ma generalmente ha più senso usare <.

:pushpin: Blocco della versione di un tema/plugin

Ad esempio, se il core di Discourse apporta una modifica durante 3.2.0.beta2-dev (trovata in version.rb) e il tuo plugin/tema inizia a dipendere da essa, aggiungeresti 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 esempio, 3.2.0.beta1 o 3.1.4) utilizzerà la versione abcde del tuo tema/plugin. Chiunque sia su 3.2.0.beta2-dev o successivo 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 corrente del core di Discourse. L’ordine delle righe nel file tecnicamente non ha 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 bloccate su commit di plugin specifici:

< 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 come:

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

  2. Committare la tua modifica e fare push sull’origine. Se utilizzi le funzionalità di protezione dei branch di GitHub, potresti voler proteggere questo branch da cancellazioni accidentali

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

:globe_showing_europe_africa: Esempio Reale

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


Questo documento è controllato tramite 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