Spaces:
Paused
Paused
| set -e | |
| # 清理残留锁文件并启动虚拟显示器 | |
| rm -f /tmp/.X99-lock | |
| Xvfb :99 -screen 0 1280x800x24 & | |
| export DISPLAY=:99 | |
| # 确保数据目录存在且可写 | |
| # 注意: /app/data 可能是 HF bucket(FUSE) 挂载点。FUSE 不一定支持 chmod, | |
| # 在 `set -e` 下未加保护的 chmod 失败会让容器崩溃 crash-loop,故用 `|| true` 兜底。 | |
| mkdir -p /app/data /app/data/auths /app/data/screenshots 2>/dev/null || true | |
| chmod -R 777 /app/data 2>/dev/null || true | |
| # 数据文件:无条件软链到 data/(确保所有写入都持久化) | |
| for f in .env accounts.json state.json; do | |
| # data 里没有就创建空文件 | |
| [ -f "/app/data/$f" ] || touch "/app/data/$f" | |
| # 删除容器内的真实文件(如果不是软链),然后建软链 | |
| rm -f "/app/$f" | |
| ln -s "/app/data/$f" "/app/$f" | |
| done | |
| # 目录软链 | |
| for d in auths screenshots; do | |
| rm -rf "/app/$d" | |
| ln -s "/app/data/$d" "/app/$d" | |
| done | |
| # --------------------------------------------------------------------------- | |
| # Self-check: 关键 import 白名单 — 失败即 crash-loop(SPEC-3 §2) | |
| # --------------------------------------------------------------------------- | |
| echo "[self-check] verifying critical imports..." | |
| if ! uv run python - <<'PYEOF' | |
| import sys | |
| # 核心 web 应用入口 | |
| from autoteam.api import app # noqa: F401 | |
| # accounts.py 全部对外契约符号(典型 typo 高发区) | |
| from autoteam.accounts import ( # noqa: F401 | |
| load_accounts, | |
| save_accounts, | |
| STATUS_ACTIVE, | |
| STATUS_EXHAUSTED, | |
| STATUS_STANDBY, | |
| STATUS_PENDING, | |
| STATUS_PERSONAL, | |
| STATUS_AUTH_INVALID, | |
| STATUS_ORPHAN, | |
| ) | |
| # manager → accounts 链路(覆盖跨模块 typo) | |
| from autoteam.manager import sync_account_states # noqa: F401 | |
| # 0515 runtime hardening helpers | |
| from autoteam.runtime_resources import collect_runtime_resource_snapshot # noqa: F401 | |
| from autoteam.playwright_lifecycle import close_playwright_objects # noqa: F401 | |
| from autoteam.playwright_probe import main as playwright_probe_main # noqa: F401 | |
| from autoteam.chatgpt_transport import build_chatgpt_transport # noqa: F401 | |
| print("[self-check] OK: %d critical symbols imported." % 15) | |
| sys.exit(0) | |
| PYEOF | |
| then | |
| echo "[self-check] FATAL: critical import failed - image is likely stale or broken." >&2 | |
| echo "[self-check] If you just pulled new code, the image must be rebuilt:" >&2 | |
| echo "[self-check] docker compose down" >&2 | |
| echo "[self-check] docker compose build --no-cache --build-arg GIT_SHA=\$(git rev-parse --short HEAD)" >&2 | |
| echo "[self-check] docker compose up -d" >&2 | |
| exit 1 | |
| fi | |
| echo "[self-check] passed." | |
| # 执行命令 | |
| exec uv run autoteam "$@" | |