Ciao a tutti
, ho appena unito una nuova funzionalità che aiuterà plugin e temi a fissare determinate versioni quando installati su istanze Discourse più vecchie.
Ora è possibile includere un file .discourse-compatibility nella radice di un repository di plugin o tema, che specifica quale versione controllare quando si esegue l’installazione su versioni precedenti di Discourse.
Motivazione
È frustrante dover ricordare quali plugin e temi sono compatibili con quali versioni di Discourse. Come amministratore, dovrebbe essere possibile scansionare facilmente queste modifiche e trovare una versione adatta alla propria installazione di Discourse senza dover leggere la cronologia dei commit del plugin. Come autore di plugin o temi, dovrebbe essere possibile gestire le versioni di installazione mentre si apportano modifiche incompatibili con le versioni precedenti, in modo da non rompere le installazioni esistenti.
Gli aggiornamenti del software Discourse vengono distribuiti piuttosto rapidamente, il che, sebbene sia fantastico, rende a volte molto difficile mantenere istanze di Discourse con molti plugin, specialmente se si seguono altri cicli di rilascio/versioni, come la versione stabile corrente. Il mio obiettivo qui è permettere un ecosistema che faciliti il processo di aggiornamento per chi segue la versione stabile o altri cicli di rilascio, offrendo agli amministratori dei siti un metodo per recuperare rapidamente e automaticamente qualsiasi versione del plugin fosse compatibile con la versione di Discourse che stanno utilizzando.
Annuncio originale (ora sostituito dalla documentazione collegata sopra)
Implementazione
La prima cosa da notare: ci basiamo sui tag del core di Discourse, dato che le versioni beta di Discourse vengono distribuite frequentemente enough da permetterci di fissare le versioni dei plugin contro di esse. Fissare le versioni contro hash git è un incubo per molte ragioni, quindi possiamo usare git describe per ottenere il tag beta/stabile più vicino.
In un plugin o in un tema, ora supportiamo un file di compatibilità delle versioni chiamato .discourse-compatibility nella radice. Questo file è un elenco ordinato in ordine decrescente (versioni più recenti di Discourse per prime) che specifica una mappa di compatibilità.
Esempio
2.5.0.beta2: git-hash-1234e5f5d
2.4.4.beta6: 4444ffff33dd
2.4.2.beta1: named-git-tag-or-branch
Per ogni plugin/tema, un aggiornamento o una ricompilazione continuerà a controllare un commit/branch/tag nominato successivo fino a trovare uno uguale o successivo alla versione corrente di Discourse.
Ad esempio, per il file di versione sopra, se la versione corrente di Discourse fosse 2.4.6.beta12, scansionerebbe il file e sceglierebbe la voce per 2.5.0.beta2.
Se la versione corrente di Discourse fosse 2.4.4.beta6, sceglierebbe la voce corrispondente per 2.4.4.beta6.
Se non esiste una versione successiva, rimane sulla versione attualmente controllata.
Ad esempio, per 2.5.0.beta3 non avverrebbe alcun fissaggio.
Se non esiste una versione precedente, viene controllata la prima elencata nel file delle versioni.
Ad esempio, per 2.2.1.beta22 verrebbe controllata la versione più antica disponibile, ovvero la voce per 2.4.2.beta1.
L’obiettivo qui è ridurre il disagio nel mantenere distribuzioni alternative che non siano strettamente basate su “tests-passed” in futuro, offrendo flessibilità agli amministratori su quando e dove eseguire l’aggiornamento. Lo stiamo facendo consentendo agli autori di plugin e temi di sviluppare modifiche incompatibili con le versioni precedenti senza influenzare le installazioni su versioni più vecchie di Discourse.
