Estamos planejando introduzir um novo sistema de versionamento para o Discourse. Nosso objetivo é fornecer mais opções e previsibilidade para os administradores da comunidade, mantendo nossa velocidade de desenvolvimento. Também estamos ajustando alguma terminologia para melhor alinhar com outros softwares.
Este documento evoluirá à medida que recebermos comentários, começarmos a implementar o sistema e, em seguida, expandirmos o uso dos novos fluxos de lançamento.
Se você tiver algum comentário/sugestão nesta fase, por favor, nos informe respondendo a este tópico!
Objetivos
- Introduzir ‘lançamentos’ mais regulares para o Discourse, que forneçam um equilíbrio entre velocidade de desenvolvimento e estabilidade
- Continuar a fornecer aproximadamente 6 lançamentos mensais que são suportados por um período estendido
- Fornecer suporte sobreposto para lançamentos regulares e de suporte estendido, para que os administradores tenham mais flexibilidade sobre o tempo de atualização, enquanto continuam a receber atualizações críticas de segurança
- Manter a cerimônia em torno dos ‘lançamentos’ ao mínimo. O máximo possível deve ser automatizado e não deve diminuir a experiência do desenvolvedor principal. Lançamentos ESR são iguais a qualquer outro lançamento.
- A nomenclatura e o procedimento devem corresponder aos padrões da indústria, para que seja mais fácil explicar aos desenvolvedores e usuários finais.
Visão Geral de Alto Nível
-
Cortar aproximadamente um lançamento por mês. A versão ‘principal’ é o ano atual, e a versão ‘secundária’ incrementa a cada lançamento. O número da versão de patch será incrementado para quaisquer correções retroativas.
ex: o primeiro lançamento de 2026 seria
v2026.0, o próximo seriav2026.1, etc.Os lançamentos receberão correções críticas por dois ciclos de lançamento completos. ex: o suporte para
2026.0continuará até que2026.2seja lançado. -
Aproximadamente a cada 6 meses, declarar um desses lançamentos como um Lançamento de Suporte Estendido (ESR). As versões ESR permanecem suportadas por 2 lançamentos após o próximo ESR ser declarado.
ex: se v2026.0 for ESR, e v2026.6 for o próximo ESR, então o suporte para v2026.0 terminará quando v2026.8 for lançado. Assumindo uma cadência mensal, isso seria uma sobreposição de 2 meses no suporte ESR.
-
Fornecer correções críticas para
latest, o lançamento mais recente, o lançamento anterior e quaisquer versões ESR ativas. -
Renomear o branch
tests-passedparalatest
Exemplo de gráfico de períodos de suporte ao longo de um ano:
gantt
title Lançamentos e Períodos de Suporte do Discourse (Jan 2026 – Jan 2027)
dateFormat YYYY-MM-DD
axisFormat %b %Y
2026.0 (ESR) :active, 2026-01-27, 2026-09-29
2026.1 :done, 2026-02-24, 2026-04-28
2026.2 :done, 2026-03-31, 2026-05-26
2026.3 :done, 2026-04-28, 2026-06-30
2026.4 :done, 2026-05-26, 2026-07-28
2026.5 :done, 2026-06-30, 2026-08-25
2026.6 (ESR) :active, 2026-07-28, 2027-01-26
2026.7 :done, 2026-08-25, 2026-10-27
2026.8 :done, 2026-09-29, 2026-11-24
2026.9 :done, 2026-10-27, 2026-12-29
2026.10 :done, 2026-11-24, 2027-01-26
2026.11 :done, 2026-12-29, 2027-01-26
Implementação
-
Cada lançamento terá um branch cortado de
latest. Estes serão nomeados e preservados indefinidamente. Por exemplo,v2026.1teria um branch chamadorelease/2026.1 -
Cada lançamento de patch será marcado. ex:
v2026.1.0,v2026.1.1, etc. -
O último lançamento será marcado como
release. O último ESR será marcado comoesr. -
O lançamento anterior será marcado como
release-previous. O ESR ativo anterior (se houver) será marcado comoesr-previous. -
Para compatibilidade retroativa, tags que correspondem aos fluxos de lançamento existentes serão alias para o equivalente novo mais próximo.
stable→esr.beta→release.tests-passed→latest.Estes serão considerados obsoletos, e pretendemos descontinuar alguns ou todos eles no futuro. Em particular, ‘beta’ é problemático porque dá a impressão de que o Discourse não está pronto para produção.
-
Em
latest, o número da versão será a versão em desenvolvimento, com o sufixo-latest. ex:2026.3.0-latest
Processo de Lançamento Automatizado
Todo mês, uma ação do GitHub abrirá um novo PR contendo um único commit que incrementa o version.rb em main para a próxima versão -latest.
Uma vez que um humano mescle o PR, outra ação do GitHub detectará main movendo-se para a próxima -latest e cortará um branch para o lançamento concluído. Essencialmente, este branch se torna um ‘candidato a lançamento’. Outro PR automatizado será aberto contra o branch de lançamento com uma atualização para remover o sufixo -latest de version.rb, e assim ‘lançá-lo’.
Geralmente, mesclaremos esses dois PRs em rápida sucessão. Mas ter PRs separados para criar e finalizar o lançamento nos dá a opção de abordar quaisquer problemas no branch antes de finalizar.
%%{init: { 'logLevel': 'debug', 'gitGraph': {'showBranches': true, 'showCommitLabel':true,'mainBranchOrder': 2}} }%%
gitGraph
checkout main
commit id:'version v2026.1-latest'
commit id:'...'
commit id:'....'
branch 'release/2026.1'
commit id:'version 2026.1'
checkout 'main'
commit id:'version v2026.2-latest'
Separadamente, outro fluxo de trabalho de ações do GitHub observará quaisquer commits retroativos para branches de lançamento. Quando algum for encontrado, um novo PR será gerado para incrementar a versão de patch nesse branch. Um humano pode decidir quando mesclar esses PRs.
Todas essas automações manterão automaticamente várias tags (release, release-previous, esr, esr-previous, além de aliases de compatibilidade retroativa) atualizadas.
Correções de Segurança
O fluxo de trabalho de correção de segurança permanece em grande parte o mesmo, exceto que agora precisamos fazer as correções em dois desses três novos locais:
-
latest -
esr -
esr-previous
-
release
-
release-previous
(Lembre-se, de acordo com a ilustração anterior, são apenas dois dos três porque esr-previous é suportado, o novo esr é o mesmo que release ou release-previous, e descontinuamos o suporte para esr-previous quando isso não for mais verdade).
Ao introduzir uma correção de segurança em latest, uma tag latest-security-fix será automaticamente movida para esse commit. O docker_manager será atualizado para monitorar essa tag e solicitar aos administradores que atualizem. Isso nos permite lançar e notificar sobre correções de segurança sem precisar acelerar um aumento de versão.
Traduções
No momento, os branches stable e tests-passed podem ser traduzidos no CrowdIn, e os resultados são integrados regularmente. No novo sistema, inicialmente planejamos que latest e release sejam traduzíveis no CrowdIn.
Idealmente, quando release se tornar release-previous ou esr, as traduções terão se estabilizado. Se houver demanda por traduções contínuas dessas versões, isso poderá ser considerado no futuro.
Compatibilidade de Plugins/Temas
Aumentar o uso de fluxos que não sejam latest do Discourse aumentará nossa dependência do sistema discourse-compatibility. Portanto, precisamos de algumas melhorias no sistema de compatibilidade.
Em vez de usar um arquivo .discourse-compatibility em main, poderíamos, em vez disso, suportar compatibilidade implícita com base em branches/tags nomeadas especialmente. Isso deve ser muito mais fácil do que gerenciar hashes de commit manualmente. Por exemplo, um plugin poderia ter branches como
d-compat/v2026.1d-compat/v2026.2d-compat/v2026.3main(usado para qualquer versão do Discourse que não tenha seu próprio branch)
Ao instalar um plugin, o Discourse pode verificar um branch que corresponda à versão atual. Se existir, faça o checkout dele. Caso contrário, verifique o arquivo .discourse-compatibility. Caso contrário, faça o checkout do branch padrão.
Podemos criar uma ação pública do GitHub que roda diariamente em cada tema/plugin, verifica novos lançamentos do Discourse e cria automaticamente esses branches. Cada tema/plugin pode optar por usar essa ação de fixação automática, ou pode ir para uma estratégia mais ‘flutuante’.
Hospedagem discourse.org
Inicialmente, nossa oferta hospedada continuará executando a versão latest do Discourse. No futuro, exploraremos opções para que nossos clientes de nível empresarial selecionem uma versão de ‘lançamento’.
Padrões de Instalação Padrão
Inicialmente, o padrão permanecerá latest. Os administradores poderão optar pelos novos fluxos de lançamento da mesma forma que optam pelo estável no momento. Podemos explorar trocas mais fáceis entre os fluxos de lançamento no futuro, uma vez que o sistema esteja mais maduro.