#!/usr/bin/env bash set -euo pipefail ROOT="/mnt/DATA/git/govoplan-core" NODE="/home/zemion/.nvm/versions/node/v22.22.3/bin" NPM="$NODE/npm" WEBUI_BIN="$ROOT/webui/node_modules/.bin" export PATH="$WEBUI_BIN:$NODE:$PATH" cd "$ROOT" ./.venv/bin/python - <<'PY' import ast import pathlib import sys roots = [ pathlib.Path("/mnt/DATA/git/govoplan-core/src"), pathlib.Path("/mnt/DATA/git/govoplan-access/src"), pathlib.Path("/mnt/DATA/git/govoplan-admin/src"), pathlib.Path("/mnt/DATA/git/govoplan-tenancy/src"), pathlib.Path("/mnt/DATA/git/govoplan-policy/src"), pathlib.Path("/mnt/DATA/git/govoplan-audit/src"), pathlib.Path("/mnt/DATA/git/govoplan-mail/src"), pathlib.Path("/mnt/DATA/git/govoplan-files/src"), pathlib.Path("/mnt/DATA/git/govoplan-campaign/src"), pathlib.Path("/mnt/DATA/git/govoplan-mail/tests"), ] errors = [] count = 0 for root in roots: if not root.exists(): continue for path in root.rglob("*.py"): count += 1 try: ast.parse(path.read_text(), filename=str(path)) except SyntaxError as exc: errors.append(f"{path}:{exc.lineno}:{exc.offset}: {exc.msg}") if errors: print("\n".join(errors)) sys.exit(1) print(f"AST syntax check passed for {count} Python files") PY ./.venv/bin/python -c 'import govoplan_core.db.bootstrap; import govoplan_core.admin.service; import govoplan_files.backend.router; import govoplan_mail.backend.sending.imap; print("targeted backend imports passed")' ./.venv/bin/python scripts/check_dependency_boundaries.py ./.venv/bin/python -m unittest tests.test_module_system ./.venv/bin/python -m unittest discover -s /mnt/DATA/git/govoplan-mail/tests ./.venv/bin/python -m unittest tests.test_api_smoke.ApiSmokeTests.test_mailbox_message_listing_reports_total_count cd "$ROOT/webui" "$NPM" run test:mail-components "$NPM" run test:module-capabilities "$NPM" run test:module-permutations cd /mnt/DATA/git/govoplan-mail/webui "$NPM" run test:mail-ui cd /mnt/DATA/git/govoplan-campaign/webui "$NPM" run test:policy-ui "$NPM" run test:template-preview