Olá, pessoal
, acabei de mesclar um novo recurso que ajudará plugins e temas a fixar versões específicas quando instalados em instâncias mais antigas do Discourse.
Agora é possível incluir um arquivo .discourse-compatibility na raiz de um repositório de plugin ou tema, que define qual versão deve ser verificada ao instalar em versões mais antigas do Discourse.
Fundamentação
É chato ter que lembrar quais plugins e temas são compatíveis com quais versões do Discourse. Como administrador, deve ser possível examinar facilmente essas alterações e encontrar uma versão adequada para sua instalação do Discourse, sem precisar ler o histórico de commits do plugin. Como autor de plugin ou tema, deve ser possível gerenciar as versões de instalação enquanto se fazem alterações incompatíveis com versões anteriores, para não quebrar instalações mais antigas.
As atualizações do software Discourse são lançadas com bastante rapidez, o que, embora seja incrível, torna a manutenção de instâncias do Discourse com muitos plugins às vezes muito difícil, especialmente se você estiver seguindo outros ciclos de lançamento/versões, como a versão estável atual. Meu plano aqui é permitir um ecossistema que facilite o processo de atualização para quem segue a versão estável ou outro ciclo de lançamento, e oferecer aos administradores do site um método para buscar rápida e automaticamente qualquer versão de plugin compatível com a versão do Discourse que estão mirando.
Anúncio Original (agora substituído pela documentação vinculada acima)
Implementação
Primeira coisa a notar: estamos dependendo das tags do núcleo do Discourse aqui, já que as versões beta do Discourse são lançadas com frequência suficiente para que possamos fixar versões de plugins contra elas. Fixar versões contra hashes do git é um pesadelo por muitos motivos, então podemos usar o git describe para obter a tag beta/estável mais próxima.
Em um plugin ou tema, agora suportamos um arquivo de compatibilidade de versão chamado .discourse-compatibility na raiz. Este arquivo é uma lista ordenada decrescente (versões mais recentes do Discourse primeiro) que especifica um mapa de compatibilidade.
Exemplo
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, uma atualização ou reconstrução continuará a verificar um commit/branch/tag nomeado posterior até encontrar um que seja igual ou posterior à versão atual do Discourse.
Por exemplo, para o arquivo de versão acima, se a versão atual do Discourse for 2.4.6.beta12, ele irá escanear o arquivo e escolher a entrada para 2.5.0.beta2.
Se a versão atual do Discourse for 2.4.4.beta6, ele escolherá a entrada correspondente para 2.4.4.beta6.
Se não houver versão posterior, ele permanece na versão atual verificada.
Por exemplo, para 2.5.0.beta3, nenhuma fixação ocorreria.
Se não houver versão anterior, ele verifica a mais antiga listada no arquivo de versão.
Por exemplo, para 2.2.1.beta22, ele verificaria a mais antiga possível dada a “versão”, a entrada para 2.4.2.beta1.
O objetivo aqui é aliviar a dor de manter implantações alternativas que não estejam estritamente em “tests-passed” no futuro e oferecer flexibilidade aos administradores sobre quando e onde atualizar. Estamos fazendo isso permitindo que autores de plugins e temas tenham uma maneira de desenvolver alterações incompatíveis com versões anteriores sem afetar instalações em versões mais antigas do Discourse.
