@coze-arch/cli 0.0.36-alpha.b20d2b → 0.0.36-alpha.d38260
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -1
- package/docs/deploy.md +3 -1
- package/lib/__templates__/expo/.cozeproj/scripts/dev_run.sh +29 -1
- package/lib/__templates__/nextjs/package.json +2 -2
- package/lib/__templates__/nextjs/pnpm-lock.yaml +508 -4
- package/lib/__templates__/nextjs/scripts/dev.sh +30 -2
- package/lib/__templates__/nuxt-vue/scripts/dev.sh +29 -1
- package/lib/__templates__/taro/.cozeproj/scripts/dev_run.sh +29 -1
- package/lib/__templates__/vite/scripts/dev.sh +29 -1
- package/lib/cli.js +216 -136
- package/package.json +1 -1
|
@@ -44,14 +44,41 @@ LOG_DIR="${COZE_LOG_DIR:-${COZE_WORKSPACE_PATH}/logs}"
|
|
|
44
44
|
LOG_FILE="${LOG_DIR}/server.log"
|
|
45
45
|
PID_FILE="${LOG_DIR}/server.pid"
|
|
46
46
|
|
|
47
|
+
# detached 出去的进程没人负责回收,超过这个时长就自己退出,避免端口与内存长期泄露。
|
|
48
|
+
MAX_RUNTIME_SECONDS=1200
|
|
49
|
+
|
|
50
|
+
# 真正被 detach 的是这层 bash wrapper:它是进程组 leader,组内 watchdog 到点回收整组
|
|
51
|
+
# (wrapper -> pnpm -> nuxt -> node);被包的进程自己先退出时也顺手清空进程组,不留残余。
|
|
52
|
+
RUN_WITH_TIMEOUT='
|
|
53
|
+
timeout_seconds=$1
|
|
54
|
+
shift
|
|
55
|
+
|
|
56
|
+
"$@" &
|
|
57
|
+
child_pid=$!
|
|
58
|
+
|
|
59
|
+
# 先忽略 TERM,才能在向整组发 TERM(自己也在组里)之后存活下来补一发 KILL。
|
|
60
|
+
( trap "" TERM
|
|
61
|
+
sleep "${timeout_seconds}"
|
|
62
|
+
echo "[dev] 后台进程运行超过 ${timeout_seconds}s,回收进程组 $$。"
|
|
63
|
+
kill -TERM -- "-$$" 2>/dev/null || true
|
|
64
|
+
sleep 5
|
|
65
|
+
kill -KILL -- "-$$" 2>/dev/null || true
|
|
66
|
+
) &
|
|
67
|
+
|
|
68
|
+
wait "${child_pid}"
|
|
69
|
+
kill -KILL -- "-$$" 2>/dev/null || true
|
|
70
|
+
'
|
|
71
|
+
|
|
47
72
|
# coze-daemon 会在 runtime shell 退出时清理原进程组。
|
|
48
73
|
# 通过 Node detached spawn 创建独立 session/进程组,并将 stdio 直接写入日志。
|
|
74
|
+
# 返回的 PID 是 wrapper 的,同时也是整个进程组的 PGID,后续按组回收。
|
|
49
75
|
spawn_detached() {
|
|
50
76
|
local cwd="$1"
|
|
51
77
|
local log_file="$2"
|
|
52
78
|
shift 2
|
|
53
79
|
|
|
54
|
-
node - "$cwd" "$log_file"
|
|
80
|
+
node - "$cwd" "$log_file" \
|
|
81
|
+
/bin/bash -c "${RUN_WITH_TIMEOUT}" detached-runner "${MAX_RUNTIME_SECONDS}" "$@" <<'NODE'
|
|
55
82
|
const fs = require('node:fs');
|
|
56
83
|
const { spawn } = require('node:child_process');
|
|
57
84
|
|
|
@@ -115,6 +142,7 @@ if [[ -z "${server_pid}" ]] || ! kill -0 "${server_pid}" 2>/dev/null; then
|
|
|
115
142
|
fi
|
|
116
143
|
|
|
117
144
|
echo "Dev server started (PID: ${server_pid})."
|
|
145
|
+
echo "Auto stop after ${MAX_RUNTIME_SECONDS}s."
|
|
118
146
|
echo "Log file: ${LOG_FILE}"
|
|
119
147
|
echo "PID file: ${PID_FILE}"
|
|
120
148
|
<% } %>
|
|
@@ -30,14 +30,41 @@ kill_process_tree() {
|
|
|
30
30
|
fi
|
|
31
31
|
}
|
|
32
32
|
|
|
33
|
+
# detached 出去的进程没人负责回收,超过这个时长就自己退出,避免端口与内存长期泄露。
|
|
34
|
+
MAX_RUNTIME_SECONDS=1200
|
|
35
|
+
|
|
36
|
+
# 真正被 detach 的是这层 bash wrapper:它是进程组 leader,组内 watchdog 到点回收整组
|
|
37
|
+
# (wrapper -> pnpm -> taro/nest);被包的进程自己先退出时也顺手清空进程组,不留残余。
|
|
38
|
+
RUN_WITH_TIMEOUT='
|
|
39
|
+
timeout_seconds=$1
|
|
40
|
+
shift
|
|
41
|
+
|
|
42
|
+
"$@" &
|
|
43
|
+
child_pid=$!
|
|
44
|
+
|
|
45
|
+
# 先忽略 TERM,才能在向整组发 TERM(自己也在组里)之后存活下来补一发 KILL。
|
|
46
|
+
( trap "" TERM
|
|
47
|
+
sleep "${timeout_seconds}"
|
|
48
|
+
echo "[dev] 后台进程运行超过 ${timeout_seconds}s,回收进程组 $$。"
|
|
49
|
+
kill -TERM -- "-$$" 2>/dev/null || true
|
|
50
|
+
sleep 5
|
|
51
|
+
kill -KILL -- "-$$" 2>/dev/null || true
|
|
52
|
+
) &
|
|
53
|
+
|
|
54
|
+
wait "${child_pid}"
|
|
55
|
+
kill -KILL -- "-$$" 2>/dev/null || true
|
|
56
|
+
'
|
|
57
|
+
|
|
33
58
|
# coze-daemon 会在 runtime shell 退出时清理原进程组。
|
|
34
59
|
# 通过 Node detached spawn 创建独立 session/进程组,并将 stdio 直接写入日志。
|
|
60
|
+
# 返回的 PID 是 wrapper 的,同时也是整个进程组的 PGID,后续按组回收。
|
|
35
61
|
spawn_detached() {
|
|
36
62
|
local cwd="$1"
|
|
37
63
|
local log_file="$2"
|
|
38
64
|
shift 2
|
|
39
65
|
|
|
40
|
-
node - "$cwd" "$log_file"
|
|
66
|
+
node - "$cwd" "$log_file" \
|
|
67
|
+
/bin/bash -c "${RUN_WITH_TIMEOUT}" detached-runner "${MAX_RUNTIME_SECONDS}" "$@" <<'NODE'
|
|
41
68
|
const fs = require('node:fs');
|
|
42
69
|
const { spawn } = require('node:child_process');
|
|
43
70
|
|
|
@@ -225,6 +252,7 @@ start_service() {
|
|
|
225
252
|
fi
|
|
226
253
|
|
|
227
254
|
echo "📝 Dev process started with PID: ${DEV_PID}"
|
|
255
|
+
echo "Auto stop after ${MAX_RUNTIME_SECONDS}s."
|
|
228
256
|
echo "Log file: ${LOG_FILE}"
|
|
229
257
|
echo "PID file: ${PID_FILE}"
|
|
230
258
|
}
|
|
@@ -44,14 +44,41 @@ LOG_DIR="${COZE_LOG_DIR:-${COZE_WORKSPACE_PATH}/logs}"
|
|
|
44
44
|
LOG_FILE="${LOG_DIR}/server.log"
|
|
45
45
|
PID_FILE="${LOG_DIR}/server.pid"
|
|
46
46
|
|
|
47
|
+
# detached 出去的进程没人负责回收,超过这个时长就自己退出,避免端口与内存长期泄露。
|
|
48
|
+
MAX_RUNTIME_SECONDS=1200
|
|
49
|
+
|
|
50
|
+
# 真正被 detach 的是这层 bash wrapper:它是进程组 leader,组内 watchdog 到点回收整组
|
|
51
|
+
# (wrapper -> pnpm -> tsx -> node);被包的进程自己先退出时也顺手清空进程组,不留残余。
|
|
52
|
+
RUN_WITH_TIMEOUT='
|
|
53
|
+
timeout_seconds=$1
|
|
54
|
+
shift
|
|
55
|
+
|
|
56
|
+
"$@" &
|
|
57
|
+
child_pid=$!
|
|
58
|
+
|
|
59
|
+
# 先忽略 TERM,才能在向整组发 TERM(自己也在组里)之后存活下来补一发 KILL。
|
|
60
|
+
( trap "" TERM
|
|
61
|
+
sleep "${timeout_seconds}"
|
|
62
|
+
echo "[dev] 后台进程运行超过 ${timeout_seconds}s,回收进程组 $$。"
|
|
63
|
+
kill -TERM -- "-$$" 2>/dev/null || true
|
|
64
|
+
sleep 5
|
|
65
|
+
kill -KILL -- "-$$" 2>/dev/null || true
|
|
66
|
+
) &
|
|
67
|
+
|
|
68
|
+
wait "${child_pid}"
|
|
69
|
+
kill -KILL -- "-$$" 2>/dev/null || true
|
|
70
|
+
'
|
|
71
|
+
|
|
47
72
|
# coze-daemon 会在 runtime shell 退出时清理原进程组。
|
|
48
73
|
# 通过 Node detached spawn 创建独立 session/进程组,并将 stdio 直接写入日志。
|
|
74
|
+
# 返回的 PID 是 wrapper 的,同时也是整个进程组的 PGID,后续按组回收。
|
|
49
75
|
spawn_detached() {
|
|
50
76
|
local cwd="$1"
|
|
51
77
|
local log_file="$2"
|
|
52
78
|
shift 2
|
|
53
79
|
|
|
54
|
-
node - "$cwd" "$log_file"
|
|
80
|
+
node - "$cwd" "$log_file" \
|
|
81
|
+
/bin/bash -c "${RUN_WITH_TIMEOUT}" detached-runner "${MAX_RUNTIME_SECONDS}" "$@" <<'NODE'
|
|
55
82
|
const fs = require('node:fs');
|
|
56
83
|
const { spawn } = require('node:child_process');
|
|
57
84
|
|
|
@@ -115,6 +142,7 @@ if [[ -z "${server_pid}" ]] || ! kill -0 "${server_pid}" 2>/dev/null; then
|
|
|
115
142
|
fi
|
|
116
143
|
|
|
117
144
|
echo "Dev server started (PID: ${server_pid})."
|
|
145
|
+
echo "Auto stop after ${MAX_RUNTIME_SECONDS}s."
|
|
118
146
|
echo "Log file: ${LOG_FILE}"
|
|
119
147
|
echo "PID file: ${PID_FILE}"
|
|
120
148
|
<% } %>
|