MeshChatX/scripts/ci/schema_fixture_generate.py

47 lines
1.4 KiB
Python

#!/usr/bin/env python3
# SPDX-License-Identifier: 0BSD
"""Generate schema_v{N}.db fixtures for migration matrix tests."""
from __future__ import annotations
import json
from pathlib import Path
from meshchatx.src.backend.database.provider import DatabaseProvider
from meshchatx.src.backend.database.schema import DatabaseSchema
ROOT = Path(__file__).resolve().parents[2]
FIXTURE_DIR = ROOT / "tests/backend/fixtures/schema_versions"
MANIFEST = FIXTURE_DIR / "manifest.json"
def main() -> int:
latest = DatabaseSchema.LATEST_VERSION
FIXTURE_DIR.mkdir(parents=True, exist_ok=True)
versions = [latest]
if latest >= 1:
versions.append(latest - 1)
if latest >= 2:
versions.append(latest - 2)
versions = sorted(set(versions))
manifest: dict[str, str] = {"latest_version": str(latest)}
for ver in versions:
db_path = FIXTURE_DIR / f"schema_v{ver}.db"
if db_path.exists():
db_path.unlink()
provider = DatabaseProvider(str(db_path))
schema = DatabaseSchema(provider)
schema._create_initial_tables()
schema.migrate_up_to(ver)
provider.close_all()
manifest[f"v{ver}"] = db_path.name
MANIFEST.write_text(json.dumps(manifest, indent=2) + "\n", encoding="utf-8")
print(f"Wrote fixtures for versions {versions} under {FIXTURE_DIR}")
return 0
if __name__ == "__main__":
raise SystemExit(main())