Change the implementation of semver and semverWithVersion
The specification of semver and semverWithVersion are a bit changed.
Some features such as ~ and ^ are removed.
Spaces aren't treated as AND operator. For AND operator, you have to use comma ,.
👎
>= 1.2 < 3.0.0
👍
>= 1.2, < 3.0.0
We think almost expressions are compatible with new specification.
New specification of semver
<operator> <version>[, <operator> <version> ...]
Supported operators
>=<=!=><=
Support multiple constraints separated with comma ,.
Multiple constraints are evaluated as AND comparison.
Spaces are trimmed.
Why this change is needed
Prerelease versions aren't compared properly in version_constraint and version_filter.
The comparison with prerelease versions is already evaluated as false.
For example, we expect v1.1.0-1 is greater than v1.0.0, but the evaluation result of version_constraint is false.
This is due to third party library aqua depends on. aqua uses hashicorp/go-version's Constraints#Check. This function has the above bug. This is obviously a bug and there was a bug report, but maintainers closed the issue and seems not to fix it.
So I considered migrating hashicorp/go-version to another library such as Masterminds/semver. But unfortunately, Masterminds/semver has a same issue and the maintainer tells it's not bug.
- https://github.com/Masterminds/semver#checking-version-constraints
- https://github.com/Masterminds/semver#working-with-prerelease-versions
So I'm considering reimplementing semver and semverWithVersion ourselves.
For aqua, some operators such as ~ and ^ aren't needed.