Как надежно и программно получить номер последней версии Discourse?

Как и во многих проектах с открытым исходным кодом, я искал релизы на GitHub. Кто-то пришёл к той же идее и также обнаружил, что у Discourse больше нет релизов на GitHub.

Моя следующая попытка заключалась в использовании тегов git на GitHub, что было бы следующим лучшим вариантом. По состоянию на сегодня, последний тег на GitHub — v3.6.0.beta2. Заглянув на страницу администратора моего собственного экземпляра Discourse, я увидел, что у меня запущена версия v3.6.0.beta3. Это означает, что не только последний релиз Discourse не помечен тегом на GitHub, но и сам Discourse (программное обеспечение) явно не использует теги GitHub как способ определения наличия нового релиза.

Я вспомнил, что моя установка работает в Docker, поэтому решил проследовать по этой «кроличьей норе» к месту, где размещены образы Discourse на Docker Hub. Там используется несколько соглашений об именовании тегов (например, 2.0.20251113-0018-web-only-stable), ни одно из которых, похоже, не соответствует формату v.X.Y.Z, который Discourse использует публично.


Итак, есть ли у кого-нибудь рекомендация, как решить эту задачу?

Версия, используемая для отображения, определяется константой Discourse::VERSION::String, которая зафиксирована в коде:

Похоже, вы используете ветку beta3-latest, что означает одну из промежуточных версий в процессе разработки beta3. Финальная версия beta3 ещё не выпущена, поэтому метка обозначает последнюю опубликованную бета-версию. Однако вы, вероятно, используете ветку latest, которая не основана на бета-выпусках.

Вы читали тему о новой стратегии версионирования?

Я ничего не использовал. Discourse сообщает мне, когда выходят обновления, и я нажимаю кнопку для их установки в интерфейсе. Я пытаюсь понять, откуда Discourse получает эту информацию.

Спасибо. Я уже наткнулся на это, но для этого мне пришлось бы регулярно выполнять git clone и просматривать этот файл, что не совсем удобно.

Первая ссылка не помогла мне получить последнюю версию (на самом деле, похоже, теперь нужно скачивать ещё больше), но вторая ссылка — полезная информация. Похоже, схема версионирования полностью изменится. Спасибо за ссылку.

Я думал, что объяснение о том, что уведомления отправляются после выхода новой бета-версии, может быть вам полезно. Когда вы обновитесь после уведомления о выпуске 3.6.0.beta3, при условии, что ваш форум настроен на “latest”, вы получите 3.6.0.beta4-latest.

Мне нужен какой-то URL, с помощью которого я мог бы с помощью языка программирования (или, скажем, curl) проверить, какая последняя версия (или версии) доступна. Обычно это какой-то фид, и ответ содержит структурированные данные, такие как JSON, XML, YAML и т. д.

Вы можете использовать проверку версии, которая находится в коде Discourse.

https://api.discourse.org/api/version_check?installed_version=X

где X — известная версия в ветке, о которой вы хотите получить информацию.

Если вам просто нужно получить последние 5 номеров бета-версий, используйте старую версию, например:
https://api.discourse.org/api/version_check?installed_version=3.1.0.beta1

Если вам нужна последняя стабильная версия, опустите параметр installed_version:
https://api.discourse.org/api/version_check

Альтернативно, обратитесь к https://github.com/discourse/discourse/blob/main/lib/version.rb и найдите строку с STRING =.

STRING = "3.6.0.beta3-latest"

(Для бета-версий используйте https://github.com/discourse/discourse/blob/beta/lib/version.rb, для стабильных — https://github.com/discourse/discourse/blob/stable/lib/version.rb)

Вот именно. Это именно то, что я искал, но мой «гугло-фу» меня подвёл. Спасибо!

Этот API показывает v3.6.0 бета 2 как последнюю (как теги на GitHub), а не бета 3, на которой работает мой форум. Не понимаю, как так вышло, но это уже другая проблема. :laughing:

Спасибо за помощь.

Данные, предоставляемые api.discourse.org, берутся из тегов GitHub, поэтому вы можете использовать любой из них. Они всегда дадут одинаковый результат.

Это потому, что вы используете предварительную версию бета 3:

Суффикс -latest указывает на то, что это предварительная версия в ветке latest Discourse и не соответствует конкретному коммиту.