Всем привет
, я только что объединил новую функцию, которая поможет плагинам и темам фиксировать определённые версии при установке на старых экземплярах Discourse.
Теперь вы можете добавить файл .discourse-compatibility в корень репозитория плагина или темы, который указывает, какую версию нужно использовать при установке на старые версии Discourse.
Обоснование
Запоминать, какие плагины и темы совместимы с какими версиями Discourse, — это боль. Как администратору, вам должно быть легко просматривать эти изменения и находить подходящую версию для вашей установки Discourse, не читая историю коммитов плагина. Как автору плагина или темы, вам должно быть удобно управлять версиями для установки, даже внося изменения, несовместимые с обратной совместимостью, чтобы не сломать старые установки.
Обновления программного обеспечения Discourse выходят довольно быстро, что, хотя и отлично, делает поддержку экземпляров Discourse с большим количеством плагинов иногда очень сложной, особенно если вы следуете другим циклам выпуска/версиям, например, текущей стабильной ветке. Моя цель здесь — создать экосистему, которая упростит процесс обновления для тех, кто следует стабильной или иной версии выпуска, и предоставит администраторам сайтов способ быстро и автоматически получать версию плагина, совместимую с целевой версией Discourse.
Оригинальное объявление (теперь заменено документацией, ссылка выше)
Реализация
Первое, что нужно отметить: мы полагаемся на теги ядра Discourse, поскольку бета-версии Discourse выходят достаточно часто, чтобы можно было фиксировать версии плагинов относительно них. Фиксация по хешам git — это кошмар по многим причинам, поэтому мы используем git describe, чтобы получить ближайший бета- или стабильный тег.
В плагине или теме теперь поддерживается файл совместимости версий с именем .discourse-compatibility в корне. Этот файл представляет собой упорядоченный список в порядке убывания (новые версии Discourse сначала), который определяет карту совместимости.
Пример
2.5.0.beta2: git-hash-1234e5f5d
2.4.4.beta6: 4444ffff33dd
2.4.2.beta1: named-git-tag-or-branch
Для каждого плагина/темы при обновлении или пересборке будет продолжаться проверка более позднего именованного коммита/ветки/тега до тех пор, пока не будет найдена версия, равная или более поздняя, чем текущая версия Discourse.
Например, для файла версий выше, если текущая версия Discourse — 2.4.6.beta12, он просканирует файл и выберет запись для 2.5.0.beta2.
Если текущая версия Discourse — 2.4.4.beta6, будет выбрана соответствующая запись для 2.4.4.beta6.
Если более поздней версии не существует, останется текущая проверенная версия.
Например, для 2.5.0.beta3 фиксация не произойдёт.
Если более ранней версии не существует, будет проверена самая ранняя, указанная в файле версий.
Например, для 2.2.1.beta22 будет проверена самая ранняя возможная версия, то есть запись для 2.4.2.beta1.
Цель здесь — облегчить боль при поддержке альтернативных развёртываний, которые в будущем не будут строго соответствовать тестам tests-passed, и предоставить администраторам гибкость в том, когда и где обновляться. Мы делаем это, предоставляя авторам плагинов и тем возможность разрабатывать изменения, несовместимые с обратной совместимостью, не влияя на установки на старых версиях Discourse.