Files
xinjian0101-continuity-dire…/tests/test_version_consistency.py
xinjian0101 358a78f8be fix: prevent starter-chain overlap and release version drift
Publish v0.8.22 with size-aware Starter Chain layout, frontend version consistency, dynamic release artifact naming, regression tests, bug audit, roadmap, changelog, and release notes.
2026-06-19 21:07:19 +08:00

41 lines
1.7 KiB
Python

from __future__ import annotations
import re
import unittest
from pathlib import Path
ROOT = Path(__file__).resolve().parents[1]
class VersionConsistencyTests(unittest.TestCase):
def test_public_version_references_match(self):
version = (ROOT / "VERSION").read_text(encoding="utf-8").strip()
self.assertRegex(version, r"^\d+\.\d+\.\d+$")
init_text = (ROOT / "__init__.py").read_text(encoding="utf-8")
pyproject = (ROOT / "pyproject.toml").read_text(encoding="utf-8")
readme = (ROOT / "README.md").read_text(encoding="utf-8")
frontend = (ROOT / "js" / "continuity_director.js").read_text(encoding="utf-8")
release_workflow = (ROOT / ".github" / "workflows" / "release.yml").read_text(encoding="utf-8")
release_notes = ROOT / "docs" / "releases" / f"v{version}.md"
init_match = re.search(r'__version__\s*=\s*"([^"]+)"', init_text)
project_match = re.search(r'^version\s*=\s*"([^"]+)"', pyproject, re.MULTILINE)
frontend_match = re.search(r'const VER\s*=\s*"([^"]+)"', frontend)
self.assertIsNotNone(init_match)
self.assertIsNotNone(project_match)
self.assertIsNotNone(frontend_match)
self.assertEqual(init_match.group(1), version)
self.assertEqual(project_match.group(1), version)
self.assertEqual(frontend_match.group(1), version)
self.assertIn(f"version-{version}-", readme)
self.assertIn(f"continuity-director-v{version}.zip", readme)
self.assertIn("steps.version.outputs.version", release_workflow)
self.assertNotIn(f"continuity-director-v{version}.zip\n", release_workflow)
self.assertTrue(release_notes.is_file())
if __name__ == "__main__":
unittest.main()