File size: 3,038 Bytes
37d26f1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
#!/usr/bin/env bash
set -euo pipefail

ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
FRONTEND_ENV="${ROOT_DIR}/web_app_pro/frontend/.env"
BACKEND_ENV="${ROOT_DIR}/web_app_pro/backend/.env"
FIREBASE_RC="${ROOT_DIR}/.firebaserc"

require_cmd() {
  local cmd="$1"
  if ! command -v "$cmd" >/dev/null 2>&1; then
    echo "Missing required command: ${cmd}"
    exit 1
  fi
}

echo "== MediSim Cross-Machine Preflight =="

require_cmd node
require_cmd npm
require_cmd python3
require_cmd firebase
require_cmd hf

NODE_MAJOR="$(node -v | sed -E 's/^v([0-9]+).*/\1/')"
if [[ "${NODE_MAJOR}" -lt 20 ]]; then
  echo "Node.js v20+ required. Found: $(node -v)"
  exit 1
fi

echo "Node: $(node -v)"
echo "npm: $(npm -v)"
echo "Python: $(python3 --version)"
echo "firebase: $(firebase --version)"
echo "hf: $(hf --version 2>/dev/null || echo 'installed')"

if [[ ! -f "${FIREBASE_RC}" ]]; then
  echo "Missing .firebaserc in repo root."
  exit 1
fi

DEFAULT_PROJECT="$(sed -nE 's/.*"default"[[:space:]]*:[[:space:]]*"([^"]+)".*/\1/p' "${FIREBASE_RC}" | head -n1)"
if [[ -z "${DEFAULT_PROJECT}" ]]; then
  echo "Could not parse default Firebase project from .firebaserc"
  exit 1
fi

echo "Firebase default project: ${DEFAULT_PROJECT}"

# Cross-machine safety: never rely on repo-local synced virtual environments.
VENV_DIRS="$(find "${ROOT_DIR}" -maxdepth 4 -type d \( -name '.venv' -o -name 'venv' \) 2>/dev/null || true)"
if [[ -n "${VENV_DIRS}" ]]; then
  echo ""
  echo "Detected virtualenv folder(s) inside synced repo:"
  echo "${VENV_DIRS}"
  echo ""
  echo "This is unsafe across machines (partial sync causes broken envs)."
  echo "Use one local venv per machine OUTSIDE the synced folder, for example:"
  echo "  python3 -m venv \"$HOME/.venvs/medisim\""
  echo "  source \"$HOME/.venvs/medisim/bin/activate\""
  echo "Then reinstall dependencies locally on each machine."
  exit 3
fi

if [[ ! -f "${FRONTEND_ENV}" ]]; then
  echo "Missing ${FRONTEND_ENV}. Create it from web_app_pro/frontend/.env.example"
  exit 1
fi
if [[ ! -f "${BACKEND_ENV}" ]]; then
  echo "Missing ${BACKEND_ENV}. Create it from web_app_pro/backend/.env.example"
  exit 1
fi

FRONTEND_PROJECT="$(sed -nE 's/^VITE_FIREBASE_PROJECT_ID=(.*)$/\1/p' "${FRONTEND_ENV}" | tail -n1 | tr -d '"' | xargs)"
if [[ -z "${FRONTEND_PROJECT}" ]]; then
  echo "VITE_FIREBASE_PROJECT_ID is missing in frontend .env"
  exit 1
fi
if [[ "${FRONTEND_PROJECT}" != "${DEFAULT_PROJECT}" ]]; then
  echo "Project mismatch: frontend .env (${FRONTEND_PROJECT}) != .firebaserc (${DEFAULT_PROJECT})"
  exit 2
fi

if ! grep -q '^ADMIN_EMAILS=' "${BACKEND_ENV}"; then
  echo "ADMIN_EMAILS missing in backend .env"
  exit 1
fi

echo "Env consistency checks passed."

echo "Recommended install commands on each machine:"
echo "  cd web_app_pro/frontend && npm ci"
echo "  python3 -m venv \"$HOME/.venvs/medisim\""
echo "  source \"$HOME/.venvs/medisim/bin/activate\""
echo "  cd web_app_pro/backend && python3 -m pip install -r requirements.txt"
echo "  ./scripts/check_firebase_sync.sh"