As you may read about semantic veersioning (SemVer), the numbers are specified as: MAJOR.MINOR.PATCH
.
Now, from Helm's documentation about the caret ^
:
The caret (^
) comparison operator is for major level changes once a stable (1.0.0) release has occurred. Prior to a 1.0.0 release the minor versions acts as the API stability level. This is useful when comparisons of API versions as a major change is API breaking. For example,
^1.2.3
is equivalent to >= 1.2.3, < 2.0.0
^1.2.x
is equivalent to >= 1.2.0, < 2.0.0
^2.x
is equivalent to >= 2.0.0, < 3
^0.2
is equivalent to >=0.2.0 <0.3.0
^0.0
is equivalent to >=0.0.0 <0.1.0
^0
is equivalent to >=0.0.0 <1.0.0
In short, the caret (^
) locks your major version number, so in all of ^1
, ^1.0.0
the 1
would be locked, and it won't match any version that has a major release number >1
.
And about the *
and x
, from Helm's documentation
The x
, X
, and *
characters can be used as a wildcard character. This works for all comparison operators. When used on the =
operator it falls back to the patch level comparison
Which means, *
, x
and X
are all the same. All of them are wildcards and they match any number.
1.2.x
is equivalent to >= 1.2.0, < 1.3.0
>= 1.2.x
is equivalent to >= 1.2.0
<= 2.x
is equivalent to < 3
*
is equivalent to >= 0.0.0
And about the tilde (~
), also refer to the same page in the documentation:
The tilde (~
) comparison operator is for patch level ranges when a minor version is specified and major level changes when the minor number is missing. For example,
~1.2.3
is equivalent to >= 1.2.3, < 1.3.0
~2.3
is equivalent to >= 2.3, < 2.4
~1.2.x
is equivalent to >= 1.2.0, < 1.3.0
See more: