Antecedentes
A veces, los temas/plugins necesitan realizar cambios que solo son compatibles con la última versión de Discourse. En esa situación, se puede indicar a las versiones anteriores de Discourse que utilicen una versión ‘fijada’ (pinned) más antigua del plugin.
Esto se logra utilizando un archivo .discourse-compatibility en la raíz del repositorio de un tema/plugin. Es un archivo YAML donde las claves especifican la versión principal de Discourse y los valores representan la versión asociada de tu tema/plugin.
Las versiones principales de Discourse se pueden especificar usando los operadores <= y <. <= es el valor predeterminado por razones históricas, pero en general tiene más sentido usar <.
Fijar la versión de un tema/plugin
Por ejemplo, si el núcleo de Discourse realiza un cambio durante 3.2.0.beta2-dev (que se encuentra en version.rb) y tu plugin/tema comienza a depender de él, agregarías una entrada al archivo .discourse-compatibility de esta manera:
< 3.2.0.beta2-dev: abcde
donde abcde es una referencia al hash de commit ‘legacy’ de TU PLUGIN que debe usarse en versiones anteriores de Discourse.
Ahora, cualquiera que use una versión anterior de Discourse (por ejemplo, 3.2.0.beta1 o 3.1.4) usará la versión abcde de tu tema/plugin. Cualquiera en 3.2.0.beta2-dev o superior continuará usando la última versión.
Múltiples Entradas
Con el tiempo, puedes agregar múltiples líneas al archivo .discourse-compatibility. Discourse siempre elegirá la especificación ‘más baja’ que coincida con la versión principal actual de Discourse. El orden de las líneas en el archivo técnicamente no importa, pero recomendamos colocar las entradas más nuevas en la parte superior.
‘Backporting’ cambios para versiones antiguas de Discourse
Imaginemos un archivo .discourse-compatibility como este, con dos especificaciones de versión diferentes fijadas a commits específicos del plugin:
< 3.2.0.beta1-dev: commithashfordiscourse31
< 3.1.0.beta1-dev: commithashfordiscourse30
Si necesitas ‘backportear’ un cambio a Discourse 3.1, harías algo como:
-
Crea una rama a partir del commit antiguo (
git checkout -b my_branch_name commithashfordiscourse31) -
Confirma tu cambio y envíalo al origen. Si usas las funciones de protección de ramas de GitHub, es posible que desees proteger esta rama contra eliminaciones accidentales.
-
Actualiza el archivo
.discourse-compatibilityen la rama principal para que ahora apunte a tu nuevo commit en la rama de soporte 3.1.
Ejemplo del Mundo Real
Aquí tienes un archivo .discourse-compatibility real del plugin discourse-solved. Ten en cuenta que, en el momento de escribir esto, todavía utiliza la sintaxis ‘legacy’ sin operadores < o <= explícitos. Por lo tanto, cada línea se interpreta automáticamente como <=.
Este documento está controlado por versiones; sugiere cambios en github.