calculus-animator / scripts /run_full_qa.py
Rsan0948
Prepare for open source release v1.0.0
de8ccff
Raw
History Blame Contribute Delete
3.18 kB
#!/usr/bin/env python3
"""One-shot QA pipeline runner.
Default behavior:
1) Install runtime + dev dependencies
2) Install Playwright Chromium
3) Run lint + typing + default tests
4) Run fuzz tests
5) Run perf smoke tests
6) Run e2e smoke tests
Usage:
python run_full_qa.py
python run_full_qa.py --skip-install
python run_full_qa.py --no-e2e
python run_full_qa.py --no-fuzz
python run_full_qa.py --security
"""
from __future__ import annotations
import subprocess
import sys
from pathlib import Path
ROOT = Path(__file__).resolve().parent.parent
def _venv_python() -> Path:
if sys.platform.startswith("win"):
return ROOT / ".venv" / "Scripts" / "python.exe"
return ROOT / ".venv" / "bin" / "python"
def _run(cmd: list[str], label: str) -> int:
return subprocess.call(cmd, cwd=str(ROOT))
def _install_deps_fallback(interpreter: str) -> int:
req = ROOT / "requirements.txt"
dev_req = ROOT / "requirements-dev.txt"
steps = [
([interpreter, "-m", "pip", "install", "--upgrade", "pip", "setuptools", "wheel"], "Upgrade pip tooling"),
]
if req.exists():
steps.append(([interpreter, "-m", "pip", "install", "-r", str(req)], "Install runtime requirements"))
if dev_req.exists():
steps.append(([interpreter, "-m", "pip", "install", "-r", str(dev_req)], "Install dev requirements"))
else:
steps.append(([interpreter, "-m", "pip", "install", "pytest", "pytest-cov", "ruff", "mypy"], "Install core dev tools"))
for cmd, label in steps:
code = _run(cmd, label)
if code != 0:
return code
return 0
def main() -> int:
args = set(sys.argv[1:])
skip_install = "--skip-install" in args
run_e2e = "--no-e2e" not in args
run_fuzz = "--no-fuzz" not in args
include_security = "--security" in args
py = _venv_python()
interpreter = str(py if py.exists() else Path(sys.executable))
if not skip_install:
setup_script = ROOT / "setup_test_env.py"
if setup_script.exists():
code = _run([interpreter, str(setup_script.name)], "Install Runtime + Dev Dependencies")
else:
code = _install_deps_fallback(interpreter)
if code != 0:
return code
if run_e2e:
code = _run([interpreter, "-m", "playwright", "install", "chromium"], "Install Playwright Chromium")
if code != 0:
return code
# Lint + type + default tests
quality_cmd = [interpreter, "scripts/run_quality.py"]
if include_security:
quality_cmd.append("--security")
code = _run(quality_cmd, "Run Quality Gate")
if code != 0:
return code
if run_fuzz:
code = _run([interpreter, "scripts/run_tests.py", "--fuzz"], "Run Fuzz Tests")
if code != 0:
return code
code = _run([interpreter, "scripts/run_tests.py", "--perf"], "Run Performance Smoke Tests")
if code != 0:
return code
if run_e2e:
code = _run([interpreter, "scripts/run_tests.py", "--e2e"], "Run E2E Smoke Tests")
if code != 0:
return code
return 0
if __name__ == "__main__":
raise SystemExit(main())