¡Hola a todos
! Acabo de integrar una nueva función que ayudará a los plugins y temas a fijar ciertas versiones al instalarse en instancias más antiguas de Discourse.
Ahora puedes incluir un archivo .discourse-compatibility en la raíz del repositorio de un plugin o tema, que designa qué versión verificar al instalarla en versiones más antiguas de Discourse.
Fundamentación
Es molesto recordar qué plugins y temas son compatibles con qué versiones de Discourse. Como administrador, debería ser posible escanear fácilmente esos cambios y encontrar una versión adecuada para tu instalación de Discourse sin tener que leer el historial de commits del plugin. Como autor de un plugin o tema, debería ser posible gestionar las versiones de instalación mientras se realizan cambios incompatibles hacia atrás, para no romper instalaciones anteriores.
Las actualizaciones del software de Discourse se implementan bastante rápido, lo cual es increíble, pero hace que mantener instancias de Discourse con muchos plugins sea a veces muy difícil, especialmente si sigues otros ciclos de lanzamiento/versiones, como la versión estable actual. Mi plan aquí es permitir un ecosistema que facilite el proceso de actualización para quienes siguen la versión estable o algún otro ciclo de lanzamiento, y ofrecer a los administradores del sitio un método para obtener rápida y automáticamente cualquier versión del plugin que fuera compatible con la versión de Discourse que están apuntando.
Anuncio original (ahora sustituido por la documentación vinculada arriba)
Implementación
Lo primero que hay que tener en cuenta: estamos dependiendo de las etiquetas del núcleo de Discourse, ya que las versiones beta de Discourse se lanzan con suficiente frecuencia como para poder fijar las versiones de los plugins contra ellas. Fijar versiones contra hashes de git es una pesadilla por muchas razones, por lo que podemos usar git describe para obtener la etiqueta beta/estable más cercana.
En un plugin o un tema, ahora soportamos un archivo de compatibilidad de versiones llamado .discourse-compatibility en la raíz. Este archivo es una lista ordenada descendente (versiones más nuevas de Discourse primero) que especifica un mapa de compatibilidad.
Ejemplo
2.5.0.beta2: git-hash-1234e5f5d
2.4.4.beta6: 4444ffff33dd
2.4.2.beta1: named-git-tag-or-branch
Para cada plugin/tema, una actualización o reconstrucción seguirá verificando un commit/rama/etiqueta nombrado posterior hasta encontrar uno que sea igual o posterior a la versión actual de Discourse.
Por ejemplo, para el archivo de versiones anterior, si la versión actual de Discourse fuera 2.4.6.beta12, escanearía el archivo y elegiría la entrada para 2.5.0.beta2.
Si la versión actual de Discourse fuera 2.4.4.beta6, elegiría la entrada coincidente para 2.4.4.beta6.
Si no existe una versión posterior, se mantiene en la versión verificada actualmente.
Por ejemplo, para 2.5.0.beta3 no se produciría ninguna fijación.
Si no existe una versión anterior, verifica la más antigua listada en el archivo de versiones.
Por ejemplo, para 2.2.1.beta22, verificaría la más antigua posible dada la “versión”, la entrada para 2.4.2.beta1.
El objetivo aquí es aliviar el dolor de mantener despliegues alternativos que no estén estrictamente en tests-passed en el futuro, y ofrecer flexibilidad a los administradores sobre cuándo y dónde actualizar. Estamos haciendo esto permitiendo a los autores de plugins y temas una forma de desarrollar cambios incompatibles hacia atrás sin afectar las instalaciones en versiones más antiguas de Discourse.