diff --git a/agent/builder.py b/agent/builder.py index dffd4c25..cf8d5e0f 100644 --- a/agent/builder.py +++ b/agent/builder.py @@ -361,7 +361,10 @@ def check_version(actual: str, expected: str) -> bool: actual += ".0" sv_actual = sv.Version(actual) - sv_expected = sv.SimpleSpec(expected) + try: + sv_expected = sv.SimpleSpec(expected) + except ValueError: + sv_expected = sv.NpmSpec(expected) return sv_actual in sv_expected diff --git a/agent/tests/test_builder.py b/agent/tests/test_builder.py new file mode 100644 index 00000000..1e278672 --- /dev/null +++ b/agent/tests/test_builder.py @@ -0,0 +1,32 @@ +from __future__ import annotations + +import unittest + + +class TestCheckVersion(unittest.TestCase): + def test_check_version(self): + from agent.builder import ValidationManager + + cases = [ + # python requires-python (SimpleSpec syntax) + ("3.11.0", ">=3.10", True), + ("3.9.0", ">=3.10", False), + ("3.11", ">=3.10,<3.13", True), + ("3.13", ">=3.10,<3.13", False), + # node engines (npm syntax) + ("18.16.0", ">=18", True), + ("16.20.0", ">=18", False), + ("18.16.0", "^18.0.0", True), + ("20.1.0", "^18.0.0", False), + ("18.16.0", ">=18 <21", True), + ("22.0.0", ">=18 <21", False), + ("18.16.0", "18.x", True), + ("20.0.0", "18.x", False), + ("20.0.0", "20 || 22", True), + ("21.0.0", "20 || 22", False), + ("18.16.0", "*", True), + ] + + for actual, expected, want in cases: + with self.subTest(actual=actual, expected=expected): + self.assertEqual(ValidationManager.check_version(actual, expected), want) diff --git a/requirements.txt b/requirements.txt index 9f405e22..6a117553 100644 --- a/requirements.txt +++ b/requirements.txt @@ -31,4 +31,4 @@ mariadb-binlog-indexer==0.0.19 mariadb-table-usage==0.0.3 psutil==7.0.0 tomli==2.4.1 -semantic-version==2.10.0 \ No newline at end of file +semantic-version==2.10.0