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’ 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 su tema/plugin.
Las versiones principales de Discourse se pueden especificar utilizando los operadores <= y <. <= es el predeterminado por razones históricas, pero generalmente tiene más sentido usar <.
Fijación de una versión de 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 su plugin/tema comienza a depender de él, entonces agregaría una entrada al archivo .discourse-compatibility como esta:
< 3.2.0.beta2-dev: abcde
donde abcde es una referencia al hash de commit ‘legado’ de SU 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 su tema/plugin. Cualquiera en 3.2.0.beta2-dev o superior continuará usando la última versión.
Múltiples Entradas
Con el tiempo, puede agregar varias líneas al archivo .discourse-compatibility. Discourse siempre elegirá la especificación ‘más baja’ que coincida con la versión actual del núcleo 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.
‘Portar’ cambios para versiones antiguas de Discourse
Imaginemos un archivo .discourse-compatibility como este, con dos especificaciones de versión diferentes fijadas a commits de plugin específicos:
< 3.2.0.beta1-dev: commithashfordiscourse31
< 3.1.0.beta1-dev: commithashfordiscourse30
Si necesita ‘portar’ un cambio a Discourse 3.1, haría algo como:
-
Crear una rama desde el commit antiguo (
git checkout -b mi_nombre_de_rama commithashfordiscourse31) -
Confirmar su cambio e insertarlo en el origen. Si utiliza las funciones de protección de ramas de GitHub, es posible que desee proteger esta rama contra eliminaciones accidentales
-
Actualizar el archivo
.discourse-compatibilityen la rama principal para que ahora apunte a su nuevo commit en la rama de soporte 3.1
Ejemplo del Mundo Real
Aquí hay un archivo .discourse-compatibility real del plugin discourse-solved. Tenga en cuenta que, en el momento de escribir esto, todavía utiliza la sintaxis ‘legado’ sin operadores explícitos < o <=. Por lo tanto, cada línea se interpreta automáticamente como <=.
Este documento está controlado por versiones: sugiera cambios en github.