Hallo zusammen
, ich habe gerade ein neues Feature gemergt, das Plugins und Themes dabei hilft, bestimmte Versionen zu verankern, wenn sie auf älteren Discourse-Instanzen installiert werden.
Sie können nun eine .discourse-compatibility-Datei im Stammverzeichnis eines Plugin- oder Theme-Repository einfügen, die angibt, welche Version beim Installieren auf älteren Discourse-Versionen ausgecheckt werden soll.
Begründung
Es ist mühsam, sich zu merken, welche Plugins und Themes mit welchen Discourse-Versionen kompatibel sind. Als Administrator sollte es möglich sein, diese Änderungen einfach zu durchsuchen und eine Version zu finden, die für Ihre Discourse-Installation geeignet ist, ohne die Commit-Historie des Plugins lesen zu müssen. Als Autor eines Plugins oder Themes sollte es möglich sein, Installationsversionen zu verwalten, während Sie abwärtsinkompatible Änderungen vornehmen, damit Sie ältere Installationen nicht beschädigen.
Discourse-Software-Updates werden recht schnell ausgerollt, was zwar toll ist, aber die Wartung von Discourse-Instanzen mit vielen Plugins manchmal sehr schwierig macht, insbesondere wenn Sie anderen Release-Zyklen oder -Versionen folgen, wie beispielsweise der aktuellen stabilen Version. Mein Plan ist es, ein Ökosystem zu schaffen, das den Aktualisierungsprozess für diejenigen erleichtert, die entweder der stabilen Version oder einem anderen Release-Zyklus folgen, und diesen Site-Administratoren eine Methode an die Hand zu geben, schnell und automatisch die Plugin-Version zu erhalten, die mit der Discourse-Version kompatibel ist, die sie anvisieren.
Ursprüngliche Ankündigung (jetzt durch die oben verlinkte Dokumentation ersetzt)
Implementierung
Erstens: Wir verlassen uns hier auf die Tags von Discourse Core, da die Betas von Discourse häufig genug veröffentlicht werden, sodass wir Plugin-Versionen daran verankern können. Die Verankerung an Git-Hashes ist aus vielen Gründen ein Albtraum, daher können wir git describe verwenden, um das nächste Beta- oder Stable-Tag zu erhalten.
In einem Plugin oder Theme unterstützen wir nun eine Versionskompatibilitätsdatei mit dem Namen .discourse-compatibility im Stammverzeichnis. Diese Datei ist eine absteigend sortierte Liste (neuere Discourse-Versionen zuerst), die eine Kompatibilitätszuordnung spezifiziert.
Beispiel
2.5.0.beta2: git-hash-1234e5f5d
2.4.4.beta6: 4444ffff33dd
2.4.2.beta1: named-git-tag-or-branch
Für jedes Plugin/Theme wird bei einem Upgrade oder Neuaufbau weiterhin ein späterer benannter Commit/Branch/Tag ausgecheckt, bis einer gefunden wird, der dem aktuellen Discourse-Version entspricht oder neuer ist.
Beispielsweise würde bei der obigen Versionsdatei, wenn die aktuelle Discourse-Version 2.4.6.beta12 wäre, die Datei gescannt und der Eintrag für 2.5.0.beta2 ausgewählt.
Wenn die aktuelle Discourse-Version 2.4.4.beta6 wäre, würde der entsprechende Eintrag für 2.4.4.beta6 ausgewählt.
Wenn keine spätere Version existiert, bleibt es bei der aktuell ausgecheckten Version.
Beispielsweise würde bei 2.5.0.beta3 keine Verankerung erfolgen.
Wenn keine frühere Version existiert, wird die früheste in der Versionsdatei aufgeführte Version ausgecheckt.
Beispielsweise würde bei 2.2.1.beta22 die frühestmögliche Version gemäß der „Version" ausgecheckt, nämlich der Eintrag für 2.4.2.beta1.
Das Ziel ist es, die Schmerzen bei der Wartung alternativer Bereitstellungen, die in Zukunft nicht strikt auf „tests-passed" basieren, zu lindern und Administratoren Flexibilität bei Zeit und Ort des Upgrades zu geben. Wir erreichen dies, indem wir Autoren von Plugins und Themes eine Möglichkeit bieten, abwärtsinkompatible Änderungen zu entwickeln, ohne Installationen auf älteren Discourse-Versionen zu beeinträchtigen.
