Looknicemm commited on
Commit
8ee19d1
·
verified ·
1 Parent(s): e7e5a85

fix(entrypoint): normalize to LF line endings (CRLF broke shebang exec)

Browse files
Files changed (1) hide show
  1. docker-entrypoint.sh +76 -76
docker-entrypoint.sh CHANGED
@@ -1,76 +1,76 @@
1
- #!/bin/bash
2
- set -e
3
-
4
- # 清理残留锁文件并启动虚拟显示器
5
- rm -f /tmp/.X99-lock
6
- Xvfb :99 -screen 0 1280x800x24 &
7
- export DISPLAY=:99
8
-
9
- # 确保数据目录存在且可写
10
- # 注意: /app/data 可能是 HF bucket(FUSE) 挂载点。FUSE 不一定支持 chmod,
11
- # 在 `set -e` 下未加保护的 chmod 失败会让容器崩溃 crash-loop,故用 `|| true` 兜底。
12
- mkdir -p /app/data /app/data/auths /app/data/screenshots 2>/dev/null || true
13
- chmod -R 777 /app/data 2>/dev/null || true
14
-
15
- # 数据文件:无条件软链到 data/(确保所有写入都持久化)
16
- for f in .env accounts.json state.json; do
17
- # data 里没有就创建空文件
18
- [ -f "/app/data/$f" ] || touch "/app/data/$f"
19
- # 删除容器内的真实文件(如果不是软链),然后建软链
20
- rm -f "/app/$f"
21
- ln -s "/app/data/$f" "/app/$f"
22
- done
23
-
24
- # 目录软链
25
- for d in auths screenshots; do
26
- rm -rf "/app/$d"
27
- ln -s "/app/data/$d" "/app/$d"
28
- done
29
-
30
- # ---------------------------------------------------------------------------
31
- # Self-check: 关键 import 白名单 — 失败即 crash-loop(SPEC-3 §2)
32
- # ---------------------------------------------------------------------------
33
- echo "[self-check] verifying critical imports..."
34
- if ! uv run python - <<'PYEOF'
35
- import sys
36
-
37
- # 核心 web 应用入口
38
- from autoteam.api import app # noqa: F401
39
-
40
- # accounts.py 全部对外契约符号(典型 typo 高发区)
41
- from autoteam.accounts import ( # noqa: F401
42
- load_accounts,
43
- save_accounts,
44
- STATUS_ACTIVE,
45
- STATUS_EXHAUSTED,
46
- STATUS_STANDBY,
47
- STATUS_PENDING,
48
- STATUS_PERSONAL,
49
- STATUS_AUTH_INVALID,
50
- STATUS_ORPHAN,
51
- )
52
-
53
- # manager → accounts 链路(覆盖跨模块 typo)
54
- from autoteam.manager import sync_account_states # noqa: F401
55
-
56
- # 0515 runtime hardening helpers
57
- from autoteam.runtime_resources import collect_runtime_resource_snapshot # noqa: F401
58
- from autoteam.playwright_lifecycle import close_playwright_objects # noqa: F401
59
- from autoteam.playwright_probe import main as playwright_probe_main # noqa: F401
60
- from autoteam.chatgpt_transport import build_chatgpt_transport # noqa: F401
61
-
62
- print("[self-check] OK: %d critical symbols imported." % 15)
63
- sys.exit(0)
64
- PYEOF
65
- then
66
- echo "[self-check] FATAL: critical import failed - image is likely stale or broken." >&2
67
- echo "[self-check] If you just pulled new code, the image must be rebuilt:" >&2
68
- echo "[self-check] docker compose down" >&2
69
- echo "[self-check] docker compose build --no-cache --build-arg GIT_SHA=\$(git rev-parse --short HEAD)" >&2
70
- echo "[self-check] docker compose up -d" >&2
71
- exit 1
72
- fi
73
- echo "[self-check] passed."
74
-
75
- # 执行命令
76
- exec uv run autoteam "$@"
 
1
+ #!/bin/bash
2
+ set -e
3
+
4
+ # 清理残留锁文件并启动虚拟显示器
5
+ rm -f /tmp/.X99-lock
6
+ Xvfb :99 -screen 0 1280x800x24 &
7
+ export DISPLAY=:99
8
+
9
+ # 确保数据目录存在且可写
10
+ # 注意: /app/data 可能是 HF bucket(FUSE) 挂载点。FUSE 不一定支持 chmod,
11
+ # 在 `set -e` 下未加保护的 chmod 失败会让容器崩溃 crash-loop,故用 `|| true` 兜底。
12
+ mkdir -p /app/data /app/data/auths /app/data/screenshots 2>/dev/null || true
13
+ chmod -R 777 /app/data 2>/dev/null || true
14
+
15
+ # 数据文件:无条件软链到 data/(确保所有写入都持久化)
16
+ for f in .env accounts.json state.json; do
17
+ # data 里没有就创建空文件
18
+ [ -f "/app/data/$f" ] || touch "/app/data/$f"
19
+ # 删除容器内的真实文件(如果不是软链),然后建软链
20
+ rm -f "/app/$f"
21
+ ln -s "/app/data/$f" "/app/$f"
22
+ done
23
+
24
+ # 目录软链
25
+ for d in auths screenshots; do
26
+ rm -rf "/app/$d"
27
+ ln -s "/app/data/$d" "/app/$d"
28
+ done
29
+
30
+ # ---------------------------------------------------------------------------
31
+ # Self-check: 关键 import 白名单 — 失败即 crash-loop(SPEC-3 §2)
32
+ # ---------------------------------------------------------------------------
33
+ echo "[self-check] verifying critical imports..."
34
+ if ! uv run python - <<'PYEOF'
35
+ import sys
36
+
37
+ # 核心 web 应用入口
38
+ from autoteam.api import app # noqa: F401
39
+
40
+ # accounts.py 全部对外契约符号(典型 typo 高发区)
41
+ from autoteam.accounts import ( # noqa: F401
42
+ load_accounts,
43
+ save_accounts,
44
+ STATUS_ACTIVE,
45
+ STATUS_EXHAUSTED,
46
+ STATUS_STANDBY,
47
+ STATUS_PENDING,
48
+ STATUS_PERSONAL,
49
+ STATUS_AUTH_INVALID,
50
+ STATUS_ORPHAN,
51
+ )
52
+
53
+ # manager → accounts 链路(覆盖跨模块 typo)
54
+ from autoteam.manager import sync_account_states # noqa: F401
55
+
56
+ # 0515 runtime hardening helpers
57
+ from autoteam.runtime_resources import collect_runtime_resource_snapshot # noqa: F401
58
+ from autoteam.playwright_lifecycle import close_playwright_objects # noqa: F401
59
+ from autoteam.playwright_probe import main as playwright_probe_main # noqa: F401
60
+ from autoteam.chatgpt_transport import build_chatgpt_transport # noqa: F401
61
+
62
+ print("[self-check] OK: %d critical symbols imported." % 15)
63
+ sys.exit(0)
64
+ PYEOF
65
+ then
66
+ echo "[self-check] FATAL: critical import failed - image is likely stale or broken." >&2
67
+ echo "[self-check] If you just pulled new code, the image must be rebuilt:" >&2
68
+ echo "[self-check] docker compose down" >&2
69
+ echo "[self-check] docker compose build --no-cache --build-arg GIT_SHA=\$(git rev-parse --short HEAD)" >&2
70
+ echo "[self-check] docker compose up -d" >&2
71
+ exit 1
72
+ fi
73
+ echo "[self-check] passed."
74
+
75
+ # 执行命令
76
+ exec uv run autoteam "$@"