1. Semantic Version Functions
有些版本结构易于分析和比较。Helm提供了适用于 SemVer 2 版本的函数。包括 semver和 semverCompare。下面你也能看到使用范围和比较的细节。
1.1. semver
semver函数将字符串解析为语义版本:
$version := semver "1.2.3-alpha.1+123"
如果解析失败,会由一个错误引起模板执行中断。
$version是一个指向Version对象的指针,包含了一下属性:
$version.Major: 主版本号 (上面的1)
$version.Minor: 次版本号 (上面的2)
$version.Patch: 补丁版本号 (上面的3)
$version.Prerelease: 预发布版本号 (上面的alpha.1)
$version.Metadata: 构建元数据 (上面的123)
$version.Original: 原始版本字符串
另外,你可以使用Compare函数比较一个Version和另一个version:
semver "1.4.3" | (semver "1.2.3").Compare
上面会返回 -1。
返回值可以是:
- -1 如果给定的版本大于Compare方法调用的版本
- 1 如果Compare调用的版本更大
- 0 如果版本相同
(注意在语义版本中,Metadata 字段在版本比较时不比较)
1.2. semverCompare
一个更健壮的比较函数是semverCompare。 这个版本支持版本范围:
- semverCompare "1.2.3" "1.2.3" 检查精确匹配
- semverCompare "~1.2.0" "1.2.3" 检查主要版本和次要版本,且补丁版本第二个版本是 大于等于 第一个。
SemVer函数使用 semver规划库,由Sprig作者创建。
1.3. 基本比较
两个元素的比较。首先,比较字符串是以空格或逗号分隔的。然后以|| (OR)分隔。比如:">= 1.2 < 3.0.0 || >= 4.2.3" 是要比较大于等于1.2且小于等于3.0.0 或者大于等于4.2.3的。
基本比较符有:
=: 相等
!=: 不相等
>: 大于
<: 小于
>=: 大于等于
<=: 小于等于
1.4. 使用预发布版本
预发布版本,对于那些不熟悉它们的人,是用于稳定版本或一般可用版本之前的软件版本。预发布版本的例子包括开发版、 alpha版、beta版,和rc版本。稳定版1.2.3的预发布版本可能是1.2.3-beta.1,按照优先顺序,预发布版本在相关版本之前发布。 比如:1.2.3-beta.1 < 1.2.3 。
根据语义版本指定的预发布版本可能不与对应的发行版本兼容。
预发布版本表示版本不稳定且可能不满足其相关正常版本所表示的预期兼容性要求。 使用不带预发布版本比较器约束的语义版本的比较会跳过预发布版本。比如 >=1.2.3 会跳过预发布而>=1.2.3-0会计算并查找预发布版本。
按照规范,上例中的0作为预发布的版本是因为预发布版本只能包含ASCII字母数字和连字符(以及.分隔符), with . separators),另外排序按照ASCII排序顺序。在ASCII排序中,最小的字符是0(查看 ASCII表)。
理解ASCII排序顺序很重要因为A-Z是在a-z之前,这意味着>=1.2.3-BETA 会返回 1.2.3-alpha。这里并不适合大小写敏感, 因为是按照ASCII排序规范指定顺序。
1.5. 连字符范围比较
有多个方法处理范围,首先是连字符范围。像这样:
1.2 - 1.4.5 等同于 >= 1.2 <= 1.4.5
2.3.4 - 4.5 等同于 >= 2.3.4 <= 4.5
1.6. 比较中通配符
x, X, 和 * 可用于通配符。适用于所有比较运算符。当使用=运算符时,会返回补丁级别的比较。比如:
1.2.x 相当于 >= 1.2.0, < 1.3.0
>= 1.2.x 相当于 >= 1.2.0
<= 2.x 相当于 < 3
* 相当于 >= 0.0.0
1.7. 波浪符号范围比较 (补丁版本)
波浪 (~) 比较运算符是补丁级别范围的比较,在指定次要版本和主要版本变化且没有次要版本时使,比如:
~1.2.3 相当于 >= 1.2.3, < 1.3.0
~1 相当于 >= 1, < 2
~2.3 相当于 >= 2.3, < 2.4
~1.2.x 相当于 >= 1.2.0, < 1.3.0
~1.x 相当于 >= 1, < 2
1.8. 插入符号比较 (主要版本)
插入符(^)比较运算是主版本级别改变时使用。在1.0.0 发布之前,次要版本充当API稳定级别版本。 当比较主要的API版本更改时,这很有用,比如:
^1.2.3 相当于 >= 1.2.3, < 2.0.0
^1.2.x 相当于 >= 1.2.0, < 2.0.0
^2.3 相当于 >= 2.3, < 3
^2.x 相当于 >= 2.0.0, < 3
^0.2.3 相当于 >=0.2.3 <0.3.0
^0.2 相当于 >=0.2.0 <0.3.0
^0.0.3 相当于 >=0.0.3 <0.0.4
^0.0 相当于 >=0.0.0 <0.1.0
^0 相当于 >=0.0.0 <1.0.0