Use recorded Node path during deploy
This commit is contained in:
@@ -80,6 +80,23 @@ require_command() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
resolve_npm_bin() {
|
||||||
|
if [[ -n "${CLAW_NODE_BIN_DIR:-}" ]]; then
|
||||||
|
export PATH="${CLAW_NODE_BIN_DIR}:${PATH}"
|
||||||
|
fi
|
||||||
|
local npm_bin="${CLAW_NPM_BIN:-$(command -v npm || true)}"
|
||||||
|
if [[ -z "${npm_bin}" || ! -x "${npm_bin}" ]]; then
|
||||||
|
fail "缺少命令:npm。请先安装 Node.js 和 npm,建议 Node.js 20 或 22。"
|
||||||
|
fi
|
||||||
|
local node_bin_dir
|
||||||
|
node_bin_dir="$(dirname "${npm_bin}")"
|
||||||
|
export PATH="${node_bin_dir}:${PATH}"
|
||||||
|
if ! "${npm_bin}" --version >/dev/null 2>&1; then
|
||||||
|
fail "npm 不可用:${npm_bin}。请确认同目录下存在 node,或重新安装 Node.js/npm。"
|
||||||
|
fi
|
||||||
|
printf "%s\n" "${npm_bin}"
|
||||||
|
}
|
||||||
|
|
||||||
bootstrap_system_packages() {
|
bootstrap_system_packages() {
|
||||||
if [[ "${BOOTSTRAP_SYSTEM}" != "1" && -f "${ENV_FILE}" ]]; then
|
if [[ "${BOOTSTRAP_SYSTEM}" != "1" && -f "${ENV_FILE}" ]]; then
|
||||||
return
|
return
|
||||||
@@ -222,25 +239,27 @@ ensure_python() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
build_frontend() {
|
build_frontend() {
|
||||||
require_command npm "请先安装 Node.js 和 npm,建议 Node.js 20 或 22。"
|
local npm_bin
|
||||||
|
npm_bin="$(resolve_npm_bin)"
|
||||||
|
export PATH="$(dirname "${npm_bin}"):${PATH}"
|
||||||
log "安装并构建前端"
|
log "安装并构建前端"
|
||||||
cd "${ROOT_DIR}/frontend/app"
|
cd "${ROOT_DIR}/frontend/app"
|
||||||
if [[ -f package-lock.json ]]; then
|
if [[ -f package-lock.json ]]; then
|
||||||
npm ci
|
"${npm_bin}" ci
|
||||||
else
|
else
|
||||||
npm install
|
"${npm_bin}" install
|
||||||
fi
|
fi
|
||||||
npm run build
|
"${npm_bin}" run build
|
||||||
}
|
}
|
||||||
|
|
||||||
remember_node_runtime() {
|
remember_node_runtime() {
|
||||||
local npm_bin node_bin node_bin_dir tmp_file
|
local npm_bin node_bin node_bin_dir tmp_file
|
||||||
npm_bin="$(command -v npm || true)"
|
npm_bin="$(resolve_npm_bin)"
|
||||||
node_bin="$(command -v node || true)"
|
|
||||||
[[ -n "${npm_bin}" ]] || fail "无法定位 npm。"
|
|
||||||
node_bin_dir="$(dirname "${npm_bin}")"
|
node_bin_dir="$(dirname "${npm_bin}")"
|
||||||
|
export PATH="${node_bin_dir}:${PATH}"
|
||||||
|
node_bin="$(PATH="${node_bin_dir}:${PATH}" command -v node || true)"
|
||||||
tmp_file="$(mktemp)"
|
tmp_file="$(mktemp)"
|
||||||
grep -v -E '^(export )?CLAW_(NPM_BIN|NODE_BIN|NODE_BIN_DIR)=' "${ENV_FILE}" >"${tmp_file}" || true
|
grep -v -E '^(# systemd 用户服务不会读取交互式 shell 配置|export CLAW_(NPM_BIN|NODE_BIN|NODE_BIN_DIR)=)' "${ENV_FILE}" >"${tmp_file}" || true
|
||||||
cat >>"${tmp_file}" <<EOF
|
cat >>"${tmp_file}" <<EOF
|
||||||
|
|
||||||
# systemd 用户服务不会读取交互式 shell 配置,这里记录部署时可用的 Node.js/npm 路径。
|
# systemd 用户服务不会读取交互式 shell 配置,这里记录部署时可用的 Node.js/npm 路径。
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ set -euo pipefail
|
|||||||
# 如果本次改动包含依赖、systemd 模板或部署脚本变化,请使用 scripts/deploy-ubuntu.sh。
|
# 如果本次改动包含依赖、systemd 模板或部署脚本变化,请使用 scripts/deploy-ubuntu.sh。
|
||||||
|
|
||||||
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
||||||
|
ENV_FILE="${ROOT_DIR}/.env.deploy"
|
||||||
BACKEND_SERVICE="zk-data-agent-backend"
|
BACKEND_SERVICE="zk-data-agent-backend"
|
||||||
FRONTEND_SERVICE="zk-data-agent-frontend"
|
FRONTEND_SERVICE="zk-data-agent-frontend"
|
||||||
BRANCH="${1:-}"
|
BRANCH="${1:-}"
|
||||||
@@ -19,6 +20,27 @@ fail() {
|
|||||||
exit 1
|
exit 1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
resolve_npm_bin() {
|
||||||
|
if [[ -f "${ENV_FILE}" ]]; then
|
||||||
|
# shellcheck disable=SC1090
|
||||||
|
source "${ENV_FILE}"
|
||||||
|
fi
|
||||||
|
if [[ -n "${CLAW_NODE_BIN_DIR:-}" ]]; then
|
||||||
|
export PATH="${CLAW_NODE_BIN_DIR}:${PATH}"
|
||||||
|
fi
|
||||||
|
local npm_bin="${CLAW_NPM_BIN:-$(command -v npm || true)}"
|
||||||
|
if [[ -z "${npm_bin}" || ! -x "${npm_bin}" ]]; then
|
||||||
|
fail "缺少命令:npm。请先安装 Node.js 和 npm,或执行 bash scripts/deploy-ubuntu.sh 重新记录 Node.js 路径。"
|
||||||
|
fi
|
||||||
|
local node_bin_dir
|
||||||
|
node_bin_dir="$(dirname "${npm_bin}")"
|
||||||
|
export PATH="${node_bin_dir}:${PATH}"
|
||||||
|
if ! "${npm_bin}" --version >/dev/null 2>&1; then
|
||||||
|
fail "npm 不可用:${npm_bin}。请确认同目录下存在 node,或重新安装 Node.js/npm。"
|
||||||
|
fi
|
||||||
|
printf "%s\n" "${npm_bin}"
|
||||||
|
}
|
||||||
|
|
||||||
cd "${ROOT_DIR}"
|
cd "${ROOT_DIR}"
|
||||||
[[ -d .git ]] || fail "${ROOT_DIR} 不是 git 仓库。"
|
[[ -d .git ]] || fail "${ROOT_DIR} 不是 git 仓库。"
|
||||||
|
|
||||||
@@ -38,7 +60,9 @@ git pull --ff-only origin "${BRANCH}"
|
|||||||
|
|
||||||
log "构建前端"
|
log "构建前端"
|
||||||
cd "${ROOT_DIR}/frontend/app"
|
cd "${ROOT_DIR}/frontend/app"
|
||||||
npm run build
|
npm_bin="$(resolve_npm_bin)"
|
||||||
|
export PATH="$(dirname "${npm_bin}"):${PATH}"
|
||||||
|
"${npm_bin}" run build
|
||||||
|
|
||||||
log "重启用户服务"
|
log "重启用户服务"
|
||||||
systemctl --user restart "${BACKEND_SERVICE}" "${FRONTEND_SERVICE}"
|
systemctl --user restart "${BACKEND_SERVICE}" "${FRONTEND_SERVICE}"
|
||||||
|
|||||||
Reference in New Issue
Block a user