Nous prévoyons d’introduire un nouveau système de versioning pour Discourse. Notre objectif est de fournir plus de choix et de prévisibilité aux administrateurs de communauté, tout en maintenant notre vélocité de développement. Nous ajustons également certains termes pour mieux nous aligner sur d’autres logiciels.
Ce document évoluera au fur et à mesure que nous recevrons des commentaires, commencerons à implémenter le système, puis étendrons l’utilisation des nouveaux flux de publication.
Si vous avez des commentaires/suggestions à ce stade, veuillez nous en faire part en répondant à ce sujet !
Objectifs
-
Introduire des « publications » plus régulières pour Discourse, qui offrent un équilibre entre la vitesse de développement et la stabilité.
-
Continuer à fournir environ 6 publications par an qui sont prises en charge pendant une période prolongée.
-
Fournir une prise en charge chevauchante pour les publications régulières et les publications à support étendu, afin que les administrateurs aient plus de flexibilité quant au moment des mises à jour, tout en continuant à recevoir les mises à jour de sécurité critiques.
-
Minimiser la cérémonie autour des « publications ». Autant que possible doit être automatisé et ne doit pas ralentir l’expérience du développeur principal. Les publications ESR sont identiques aux autres publications.
-
La dénomination et la procédure doivent correspondre aux normes de l’industrie, afin qu’il soit plus facile d’expliquer aux développeurs et aux utilisateurs finaux.
Aperçu général
-
Couper environ une publication par mois. La version « majeure » est l’année en cours, et la version « mineure » s’incrémente à chaque publication. Le numéro de version de correctif sera incrémenté pour tous les correctifs rétroportés.
par exemple, la première publication de 2026 serait
v2026.0, la suivante seraitv2026.1, etc.Les publications recevront des correctifs critiques pendant deux cycles de publication complets. par exemple, la prise en charge de
2026.0se poursuivra jusqu’à la publication de2026.2. -
Environ tous les 6 mois, déclarer l’une de ces publications comme une publication à support étendu (ESR). Les versions ESR restent prises en charge pendant 2 publications après la déclaration de la prochaine ESR.
par exemple, si v2026.0 est ESR, et v2026.6 est la prochaine ESR, alors la prise en charge de v2026.0 se terminera lors de la publication de v2026.8. En supposant une cadence mensuelle, cela représenterait un chevauchement de 2 mois dans la prise en charge ESR.
-
Fournir des correctifs critiques pour
latest, la publication la plus récente, la publication précédente et toutes les versions ESR actives. -
Renommer la branche
tests-passedenlatest.
Exemple de graphique des périodes de prise en charge sur un an :
gantt
title Publications et périodes de prise en charge de Discourse (janv. 2026 – janv. 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
Implémentation
-
Chaque publication aura une branche créée à partir de
latest. Celles-ci seront nommées et conservées indéfiniment. Par exemple,v2026.1aurait une branche nomméerelease/2026.1. -
Chaque publication de correctif sera taguée. par exemple,
v2026.1.0,v2026.1.1, etc. -
La dernière publication sera taguée
release. La dernière ESR sera taguéeesr. -
La publication précédente sera taguée
release-previous. L’ESR active précédente (le cas échéant) sera taguéeesr-previous. -
Pour des raisons de compatibilité ascendante, les tags correspondant aux flux de publication existants seront aliasés vers le nouvel équivalent le plus proche.
stable→esr.beta→release.tests-passed→latest.Ceux-ci seront considérés comme obsolètes, et nous visons à les supprimer à l’avenir. En particulier, « beta » est problématique car il donne l’impression que Discourse n’est pas prêt pour la production.
-
Sur
latest, le numéro de version sera la version en cours de développement, suffixée par-latest. par exemple,2026.3.0-latest.
Processus de publication automatisé
Chaque mois, une action GitHub ouvrira une nouvelle PR contenant un seul commit qui incrémente version.rb sur main vers la prochaine version -latest.
Une fois qu’un humain aura fusionné la PR, une autre action GitHub détectera le passage de main à la prochaine version -latest et créera une branche pour la publication terminée. Essentiellement, cette branche devient un « candidat à la publication ». Une autre PR automatisée sera ouverte contre la branche de publication avec une mise à jour pour supprimer le suffixe -latest de version.rb, et ainsi la « publier ».
Généralement, nous fusionnerons ces deux PR rapidement. Mais avoir des PR séparées pour la création et la finalisation de la publication nous donne la possibilité de résoudre tout problème dans la branche avant la finalisation.
%%{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'
Séparément, un autre workflow d’actions GitHub surveillera les commits rétroportés vers les branches de publication. Lorsqu’ils sont trouvés, une nouvelle PR sera générée pour incrémenter la version de correctif sur cette branche. Un humain pourra décider quand fusionner ces PR.
Toutes ces automatisations maintiendront automatiquement à jour les différents tags (release, release-previous, esr, esr-previous, ainsi que les alias de compatibilité ascendante).
Correctifs de sécurité
Le flux de travail des correctifs de sécurité reste largement le même, à l’exception du fait que nous devons maintenant apporter les correctifs dans deux des trois endroits suivants :
-
latest -
esr -
esr-previous
-
release
-
release-previous
(Rappelez-vous, selon l’illustration précédente, il ne s’agit que de deux des trois car esr-previous est pris en charge, le nouvel esr est identique à release ou release-previous, et nous supprimons la prise en charge de esr-previous lorsque ce n’est plus le cas).
Lors de l’introduction d’un correctif de sécurité dans latest, un tag latest-security-fix sera automatiquement déplacé vers ce commit. docker_manager sera mis à jour pour surveiller ce tag et inviter les administrateurs à mettre à jour. Cela nous permet de publier et de notifier les correctifs de sécurité sans avoir besoin d’accélérer une augmentation de version.
Traductions
Actuellement, les branches stable et tests-passed peuvent être traduites dans CrowdIn, et les résultats sont régulièrement intégrés. Dans le nouveau système, nous prévoyons initialement que latest et release soient traduisibles dans CrowdIn.
Idéalement, au moment où release deviendra release-previous ou esr, les traductions seront stabilisées. S’il y a une demande pour des traductions continues de ces versions, alors c’est quelque chose qui pourrait être envisagé à l’avenir.
Compatibilité des plugins/thèmes
L’augmentation de l’utilisation des flux autres que latest de Discourse augmentera notre dépendance au système discourse-compatibility. Nous avons donc besoin d’améliorations du système de compatibilité.
Au lieu d’utiliser un fichier .discourse-compatibility sur main, nous pourrions plutôt prendre en charge la compatibilité implicite basée sur des branches/tags nommés de manière spéciale. Ce devrait être beaucoup plus facile que de jongler manuellement avec les hachages de commit. Par exemple, un plugin pourrait avoir des branches comme :
d-compat/v2026.1d-compat/v2026.2d-compat/v2026.3main(utilisé pour toute version de Discourse qui n’a pas sa propre branche)
Lors de l’installation d’un plugin, Discourse peut vérifier l’existence d’une branche correspondant à la version actuelle. Si elle existe, la récupérer. Sinon, vérifier le fichier .discourse-compatibility. Sinon, récupérer la branche par défaut.
Nous pouvons créer une action GitHub publique qui s’exécute quotidiennement sur chaque thème/plugin, vérifie les nouvelles versions de Discourse et crée automatiquement ces branches. Chaque thème/plugin pourrait choisir d’utiliser cette action d’épinglage automatique, ou opter pour une stratégie plus « flottante ».
Hébergement discourse.org
Initialement, notre offre hébergée continuera à exécuter la version latest de Discourse. À l’avenir, nous explorerons des options pour que nos clients de niveau entreprise puissent sélectionner une version « release ».
Paramètres par défaut de l’installation standard
Initialement, le paramètre par défaut restera latest. Les administrateurs pourront opter pour le nouveau flux de publication de la même manière qu’ils optent actuellement pour stable. Nous pourrions explorer des commutations plus faciles entre les flux de publication à l’avenir, une fois que le système sera plus mature.