切换到语义化版本控制
作者 -
经过多年的讨论,我们终于准备好在 Asciidoctor 中切换到语义化版本控制。这次切换将作为每个参与项目下一次重大发布的一部分。
关于语义化版本控制
语义化版本控制(或简称 SemVer)是一个基于简单的 MAJOR.MINOR.PATCH 顺序选择版本号的逻辑系统。
-
MAJOR 版本用于引入不兼容的更改(无论大小)。
-
MINOR 版本用于添加向后兼容的功能。
-
PATCH 版本用于修复 Bug(当然是向后兼容的)。
还可以通过构建元数据为预发布版本留出空间。您可以在 https://semver.org 上了解更多信息。
在我们当前的系统中,补丁发布与主版本和次版本发布无法区分,并且只有一个发布线。经验告诉我们(以艰难的方式),这种情况既不清晰也不可持续。对我们而言,SemVer 旨在实现更好的沟通和发展空间。它是一个基于共享期望和信任的系统。虽然它可能不完美,但 SemVer 应该有助于理解版本号的含义以及何时进行升级。我们不能期望它能防止破坏,但至少您会知道何时可能发生。
独立版本化项目
切换到 SemVer 也意味着 Asciidoctor 项目,即 Asciidoctor、AsciidoctorJ 和 Asciidoctor.js,将独立进行版本控制。生态系统中的其他项目也可能会开始独立版本化(事实上,有些已经开始了)。
AsciidoctorJ 和 Asciidoctor.js 都已经发展到远远超出重新分发 Asciidoctor RubyGem 的阶段。它们拥有自己的 API、扩展模型、自定义功能和平台集成。这值得拥有自己的版本线。独立的版本线还将使用户能够更好地理解每个版本将带来什么。
-
核心处理器(Asciidoctor、AsciidoctorJ 和 Asciidoctor.js)将从 2.0.0 版本开始迁移到 SemVer。我们计划这三个项目同时进行这次主版本迁移,以最大限度地减少混淆。
-
如果 Asciidoctor.js 或 AsciidoctorJ 需要对 Asciidoctor 进行更改,它们可以强制 Asciidoctor 发布。这意味着 Asciidoctor 必须随时“准备发布”。补丁或次要版本发布不需要太多讨论,但主版本发布自然需要。
-
2.0.0 之后,我们不会尝试在三个项目之间统一版本号。Guillaume 提出了一个有力的论点,认为尝试统一版本号会违背 SemVer 的原则,从而导致版本号失去意义。这确实会增加记录 Asciidoctor.js 或 AsciidoctorJ 所提供底层 Asciidoctor 版本的复杂性。然而,AsciidoctorJ 和 Asciidoctor.js 都提供了访问底层 Asciidoctor 版本号的 API。发布号也可以通过
asciidoctor-version文档属性访问。
我们考虑过在坚持 SemVer 的同时,如何将 Asciidoctor、AsciidoctorJ 和 Asciidoctor.js 锁定到同一版本。然而,我们得出的结论是,这样做只会延续我们看到的版本发布积压的状况。最好让这些项目拥有在适当时机自由发布的自由。有了三个版本号段 (MAJOR.MINOR.PATCH),我们终于有了足够的空间来实现这些发布!