SemVer 冲突:如果有一些 alpha/beta/rc 版本并且工作正在进行中,如何在上一个稳定版本上发布错误修复?

SemVer collision: How to release bug fix over the last stable version if there are some alpha/beta/rc versions and the work is in progress?

我正在维护 some js library。发布遵循 SemVer。当前的稳定版本是 1.5.0。我正在研究 1.5.1 并拥有 1.5.1-beta.2,它在 npm 上发布,带有 "next" 标签。今天我收到了错误报告,发现了问题并准备修复它。问题是 1.5.1 最近几天不会完成,结果比我最初计划的要复杂。但我希望发布修复程序。

在这种情况下正确的策略是什么?我想避免的明显方法是推迟错误修复,直到 1.5.1 完成并发布,然后发布 1.5.2 包含修复。

另一种方法是基于 1.5.0 将修复发布为 1.5.1,然后继续之前的工作,将其从 1.5.1-beta.21.5.2 甚至 1.6.0。在这种情况下,我担心与结果链不一致:

1.5.0 → 1.5.1-beta → 1.5.1-beta.1 → 1.5.1-beta.2 → 1.5.1(错误修复,基于 1.5.0)→ 1.5.2(基于在 1.5.1-beta.2)

如何使用 SemVer 解决此类冲突?

好的,您有一个错误集 A 当前作为 1.5.1-beta2 烘焙,并且您有一个新的错误集 B,您希望立即修复它。正确的机制是分叉 1.5.0,修复错误集 B,然后发布 1.5.2(假设您不需要测试版)。然后将你的 B 修复合并到你的 A 工作分支并发布 1.5.3-beta1 并继续将其驱动到正式版本。

当您有两个并行的测试序列 运行 时,它会变得有点复杂,尤其是当您不确定哪个会先发布,但它是可管理的时。关键是要牢记,SemVer 优先级如何影响您的客户做出的决定(他们应用的算法),是否将特定版本快速跟踪到他们的生产系统,以及他们的开发人员如何从您那里获取信息。

我的生产系统有两个输入:

  1. 开发是我工程师的产物。
  2. 自动维护是系统的产物:
    • 提取补丁版本并将它们应用于我当前生产代码的分支。
    • 根据广泛的功能和性能测试套件测试应用的更改。
    • 如果测试是绿色的,飞行测试我的生产环境中的变化,同时监控生产故障率的异常变化。
    • 只要一切顺利,并且不会有人介入阻止,最终会将更改推广到整个生产系统。

当然,服务和包装产品会有所不同。关键是,您可以使用您的发布点向您的客户自动化或开发人员发出信号,表明您有一个重要的错误修复,几乎没有破坏任何东西的风险。不要求 1.5.2 有任何回溯到 1.5.1-beta# 的血统。您不需要发布 1.5.1。然而,通常会在您的发行说明中添加评论,即 1.5.2 是对 1.5.0 中的错误的热修复,并且不包含 1.5.1-beta# 中的修复。

虽然您可能永远不需要这样做,但您不必在最终的 1.5.3 版本中包含 1.5.2 中的错误修复,前提是以后的版本通过了质量控制。有时,特定的错误修复最终不适用于以后的版本。

如何保持产品质量完全取决于您。 SemVer 标准定义了如何表示特定版本的 risk/importance 级别。