Contexte
Parfois, les thèmes/plugins doivent apporter des modifications qui ne sont compatibles qu’avec la dernière version de Discourse. Dans ce cas, les anciennes versions de Discourse peuvent être instruites pour utiliser une version ‘épinglée’ plus ancienne du plugin.
Ceci est réalisé à l’aide d’un fichier .discourse-compatibility à la racine d’un dépôt de thème/plugin. C’est un fichier YAML où les clés spécifient la version principale de Discourse, et les valeurs représentent la version associée de votre thème/plugin.
Les versions principales de Discourse peuvent être spécifiées en utilisant les opérateurs <= et <. <= est la valeur par défaut pour des raisons historiques, mais en général, il est plus logique d’utiliser <.
Épingler une version de thème/plugin
Par exemple, si le cœur de Discourse apporte une modification au cours de 3.2.0.beta2-dev (trouvé dans version.rb) et que votre plugin/thème commence à en dépendre, vous ajouteriez une entrée au fichier .discourse-compatibility comme ceci :
< 3.2.0.beta2-dev: abcde
où abcde est une référence au hachage de commit ‘hérité’ de VOTRE PLUGIN qui devrait être utilisé sur les anciennes versions de Discourse.
Maintenant, toute personne utilisant une ancienne version de Discourse (par exemple, 3.2.0.beta1, ou 3.1.4) utilisera la version abcde de votre thème/plugin. Toute personne utilisant 3.2.0.beta2-dev ou une version ultérieure continuera à utiliser la dernière version.
Entrées multiples
Avec le temps, vous pouvez ajouter plusieurs lignes au fichier .discourse-compatibility. Discourse choisira toujours la spécification la ‘plus basse’ qui correspond à la version actuelle du cœur de Discourse. L’ordre des lignes dans le fichier n’a techniquement pas d’importance, mais nous recommandons de placer les entrées les plus récentes en haut.
‘Rétroporter’ les modifications pour les anciennes versions de Discourse
Imaginons un fichier .discourse-compatibility comme celui-ci, avec deux spécifications de version différentes épinglées à des commits de plugin spécifiques :
< 3.2.0.beta1-dev: commithashfordiscourse31
< 3.1.0.beta1-dev: commithashfordiscourse30
Si vous avez besoin de ‘rétroporter’ une modification vers Discourse 3.1, vous feriez quelque chose comme :
-
Créer une branche à partir de l’ancien commit (
git checkout -b my_branch_name commithashfordiscourse31) -
Committer votre modification et la pousser vers l’origine. Si vous utilisez les fonctionnalités de protection de branche de GitHub, vous voudrez peut-être protéger cette branche contre une suppression accidentelle
-
Mettre à jour le fichier
.discourse-compatibilitysur la branche principale afin qu’il pointe maintenant vers votre nouveau commit sur la branche de support 3.1
Exemple concret
Voici un vrai fichier .discourse-compatibility du plugin discourse-solved. Notez qu’au moment de la rédaction, il utilise toujours la syntaxe ‘héritée’ sans opérateurs < ou <= explicites. Par conséquent, chaque ligne est automatiquement interprétée comme <=.
Ce document est contrôlé par version - suggérez des modifications sur github.