File size: 3,564 Bytes
e0015ee
 
 
d4a0bf7
e0015ee
 
 
d4a0bf7
e0015ee
d4a0bf7
e0015ee
 
 
d4a0bf7
 
 
e0015ee
 
 
d4a0bf7
e0015ee
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
d4a0bf7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
e0015ee
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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

# --- Réglages (surchageables en Variables/Secrets HF) ---
: "${GITHUB_REPO_API_URL:=https://github.com/chourmovs/RFPmasterApi.git}"
: "${GITHUB_REPO_CORE_URL:=https://github.com/chourmovs/RFPmaster.git}"
: "${GITHUB_TOKEN:=}"                     # si besoin pour repos privés
: "${API_MODULE:=rfp_api_app}"            # module exposant 'app'
: "${API_APP_ATTR:=app}"
: "${BRANCH_API:=}"                       # ex: main ; vide = HEAD
: "${BRANCH_CORE:=}"                      # ex: main
: "${WORKSPACE:=/home/user/workspace}"

# Assure que ~/.local/bin (pip --user) est dans le PATH
export PATH="/home/user/.local/bin:/usr/local/bin:/usr/bin:/bin:${PATH}"

API_DIR="${WORKSPACE}/RFPmasterApi"
CORE_DIR="${WORKSPACE}/RFPmaster"         # contiendra rfp_parser/

echo "===== Application Startup at $(date '+%F %T') ====="
echo "[startup] WORKSPACE=${WORKSPACE}"
mkdir -p "${WORKSPACE}"

clone_or_update () {
  local repo_url="$1" target="$2" branch="$3"

  if [ ! -d "${target}/.git" ]; then
    echo "[git] cloning ${repo_url} -> ${target}"
    if [ -n "${GITHUB_TOKEN}" ]; then
      git -c http.extraHeader="Authorization: Basic $(printf 'oauth2:%s' "${GITHUB_TOKEN}" | base64 -w0)" \
          clone --depth=1 ${branch:+-b "${branch}"} "${repo_url}" "${target}"
    else
      git clone --depth=1 ${branch:+-b "${branch}"} "${repo_url}" "${target}"
    fi
  else
    echo "[git] updating ${target}"
    git -C "${target}" fetch --depth=1 origin
    if [ -n "${branch}" ]; then
      git -C "${target}" checkout -q "${branch}" || true
    fi
    git -C "${target}" reset --hard ${branch:+origin/"${branch}"} ${branch:+"$(true)"} || git -C "${target}" reset --hard origin/HEAD
  fi
}

# --- Clone/update des deux repos ---
clone_or_update "${GITHUB_REPO_API_URL}"  "${API_DIR}"  "${BRANCH_API}"
clone_or_update "${GITHUB_REPO_CORE_URL}" "${CORE_DIR}" "${BRANCH_CORE}"

# Safe dir pour Git (HF)
git config --global --add safe.directory "${API_DIR}" || true
git config --global --add safe.directory "${CORE_DIR}" || true

# --- Installation des dépendances Python (au run) ---
echo "[pip] Checking uvicorn presence..."
if ! command -v uvicorn >/dev/null 2>&1; then
  echo "[pip] uvicorn not found → installing requirements"
  if [ -f "${API_DIR}/requirements.txt" ]; then
    # --user pour installer dans ~/.local et éviter les droits root
    python -m pip install --user --no-cache-dir -r "${API_DIR}/requirements.txt"
  else
    # garde-fou minimal
    python -m pip install --user --no-cache-dir fastapi "uvicorn[standard]" requests pandas openpyxl
  fi
else
  echo "[pip] uvicorn OK"
fi

# (Optionnel) si ton repo CORE a aussi un requirements.txt :
if [ -f "${CORE_DIR}/requirements.txt" ]; then
  echo "[pip] Installing CORE requirements"
  python -m pip install --user --no-cache-dir -r "${CORE_DIR}/requirements.txt" || true
fi

# --- PYTHONPATH : on expose les deux répertoires (API + CORE/rfp_parser) ---
export PYTHONPATH="${API_DIR}:${CORE_DIR}:${PYTHONPATH:-}"

# --- Sanity checks imports ---
echo "[check] importing ${API_MODULE}"
python - <<'PY' "${API_MODULE}"
import importlib, sys
m = sys.argv[1]
importlib.import_module(m)
print(f"[check] import {m}: OK")
PY

echo "[check] importing rfp_parser"
python - <<'PY'
import importlib
importlib.import_module("rfp_parser")
print("[check] import rfp_parser: OK")
PY

# --- Lancement Uvicorn ---
cd "${API_DIR}"
echo "[uvicorn] launching ${API_MODULE}:${API_APP_ATTR} on 0.0.0.0:7860"
exec uvicorn "${API_MODULE}:${API_APP_ATTR}" --host 0.0.0.0 --port 7860