Skip to content

Commit b319334

Browse files
committed
[red] Require the public firmware baseline version
Signed-off-by: Viwat Vchirawongkwin <viwat.v@chula.ac.th>
1 parent 81a4acc commit b319334

1 file changed

Lines changed: 46 additions & 0 deletions

File tree

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
# SPDX-License-Identifier: MIT
2+
# Part of PyBLE (https://pyble.dev) — see /LICENSE.
3+
4+
"""Repository-level firmware agent version contract (BLD-12/13)."""
5+
6+
from __future__ import annotations
7+
8+
import ast
9+
import pathlib
10+
import tomllib
11+
import unittest
12+
13+
14+
ROOT = pathlib.Path(__file__).resolve().parents[3]
15+
LOCK_PATH = ROOT / "firmware" / "versions.lock"
16+
PACKAGE_PATH = ROOT / "firmware" / "pyble" / "__init__.py"
17+
BASELINE_VERSION = "0.4.2"
18+
19+
20+
def _package_version() -> str:
21+
tree = ast.parse(PACKAGE_PATH.read_text(encoding="utf-8"), filename=str(PACKAGE_PATH))
22+
values = []
23+
for node in tree.body:
24+
if not isinstance(node, ast.Assign):
25+
continue
26+
if any(isinstance(target, ast.Name) and target.id == "__version__" for target in node.targets):
27+
if not isinstance(node.value, ast.Constant) or not isinstance(node.value.value, str):
28+
raise AssertionError("pyble.__version__ must be one literal string")
29+
values.append(node.value.value)
30+
if len(values) != 1:
31+
raise AssertionError("firmware/pyble/__init__.py must assign __version__ exactly once")
32+
return values[0]
33+
34+
35+
class AgentVersionLockTests(unittest.TestCase):
36+
def test_runtime_version_equals_the_canonical_release_lock(self) -> None:
37+
lock = tomllib.loads(LOCK_PATH.read_text(encoding="utf-8"))
38+
self.assertEqual(_package_version(), lock["pyble"]["agent_version"])
39+
40+
def test_public_baseline_selects_v042(self) -> None:
41+
lock = tomllib.loads(LOCK_PATH.read_text(encoding="utf-8"))
42+
self.assertEqual(lock["pyble"]["agent_version"], BASELINE_VERSION)
43+
44+
45+
if __name__ == "__main__":
46+
unittest.main()

0 commit comments

Comments
 (0)