Minimum_discourse_version 在 -latest 构建(如 2026.8.0-latest.1)上检查失败

默认 latest 渠道中的主题/组件会被自动禁用,且主题作者必须使用不直观的变通方法。

我在此处遇到了这个问题:Featured Topics - #76 by cogdog 所有最低版本都需要使用类似 xxx.x.999 的格式,且该格式必须低于它们实际应匹配的版本,这非常不直观。

平台

  • 自托管 Discourse,位于 latest 分支
  • Discourse 版本:2026.8.0-latest.1
  • 影响范围:主题/主题组件的创建(about.json 元数据)以及主题兼容性检查

描述

实际结果:
当站点运行 -latest 构建版本 2026.8.0-latest.1 时,about.json 中设置了 "minimum_discourse_version": "2026.8.0" 的主题会被视为不兼容并被自动禁用。保持该主题启用的唯一方法是设置一个较低的版本,例如 "minimum_discourse_version": "2026.7.999"

当导入将 minimum_discourse_version 设置为 -latest 样式值(例如 2025.12.0-latest)的主题时,也会发生类似问题,该值会被拒绝为无效——请参阅现有报告:主题配置文件中minimum_discourse_version不支持日期化版本格式

预期结果:
由于 2026.8.0-latest.12026.8.0 发布系列的 -latest 构建版本,它应该满足 2026.8.0 的最低要求。Latest 构建版本比相应的已发布版本更新,而不是更旧。

但是 -latest 版本是该版本正式发布之前的版本。多年来,兼容性条目一直以此为依据。

你使用 <2026.7.999 来处理这一点似乎不太直观,但为什么你不指定 <2026.8.0-latest 呢?

如果我在 2026.8 开发期间需要某个特定的提交,我可以确定所有使用 2026.8 正式版的用户都有它,但我不能确定所有使用 2026.8-latest 的用户都有它。也许他们最后一次更新是在该特定提交添加之前。因此,如果 2026.8 默认包含 2026.8-latest,可能会导致某些功能损坏。我觉得,让管理员等待几周才能使用/更新主题,比因为缺少所需提交而导致功能损坏的风险要好。

1 个赞

是的,这是正确的——2026.8.0-latest 的版本号低于 2026.8.0。你可以使用 Semver 解析器来确认这一点,例如在 Ruby 中:

irb(main):001> Gem::Version.new("2026.8.0-latest") < Gem::Version.new("2026.8.0")
=> true

我们应该修复这个问题。主题作者应该能够这样写:

minimumDiscourseVersion: "2026.8.0-latest"

不过,正如 @moin 所提到的,这样做可能存在风险,因为 -latest 指向大量不同的提交。所以在理想情况下,我们应该等到下一个版本发布后,再让主题/插件依赖新的核心功能。