Przeglądaj źródła

fix(tool-trunk-checker): 去 /workspace 硬编码,兼容宿主机与 BSD xargs

- WORKSPACE_ROOT 可覆盖,回退 git 根/当前目录,容器内仍默认 /workspace
- xargs 由 GNU 专有 -d/-r 改为 tr '\n' '\0' | xargs -0 -s,兼容 macOS(BSD)
- trunk 二进制解析与 REPO_ROOT 回退统一走 WORKSPACE_ROOT
b 3 tygodni temu
rodzic
commit
008e25299b
1 zmienionych plików z 14 dodań i 6 usunięć
  1. 14 6
      tool-trunk-checker.sh

+ 14 - 6
tool-trunk-checker.sh

@@ -95,15 +95,21 @@ echo "🚀 正在运行代码质量检查..."
 echo "========================================"
 echo "模式: ${MODE}"
 
+# 工作根:优先 WORKSPACE_ROOT;容器内默认 /workspace,宿主机上回退当前 git 仓库根/当前目录
+WORKSPACE_ROOT="${WORKSPACE_ROOT:-/workspace}"
+if [ ! -d "$WORKSPACE_ROOT" ]; then
+	WORKSPACE_ROOT="$(git rev-parse --show-toplevel 2>/dev/null || pwd)"
+fi
+
 # 切换到工作目录(文件收集阶段;实际运行 trunk 前会再切到目标仓库根)
-cd /workspace || exit
+cd "$WORKSPACE_ROOT" || exit
 
-# 解析 trunk 二进制(优先级:TRUNK_BIN 环境变量 > /workspace/trunk > PATH 中的 trunk)
+# 解析 trunk 二进制(优先级:TRUNK_BIN 环境变量 > $WORKSPACE_ROOT/trunk > PATH 中的 trunk)
 resolve_trunk() {
 	if [[ -n ${TRUNK_BIN-} ]] && [[ -x ${TRUNK_BIN} ]]; then
 		printf '%s\n' "${TRUNK_BIN}"
-	elif [[ -x /workspace/trunk ]]; then
-		printf '%s\n' /workspace/trunk
+	elif [[ -x "${WORKSPACE_ROOT}/trunk" ]]; then
+		printf '%s\n' "${WORKSPACE_ROOT}/trunk"
 	elif command -v trunk >/dev/null 2>&1; then
 		command -v trunk
 	else
@@ -187,7 +193,7 @@ echo ""
 # 确定目标所在的 git 仓库根并切换(子模块是独立 git 仓库,需在各自仓库根运行 trunk)
 if [[ -n ${ALL_FILES} ]]; then
 	FIRST_FILE="$(printf '%s\n' "${ALL_FILES}" | head -n 1)"
-	REPO_ROOT="$(git -C "$(dirname "${FIRST_FILE}")" rev-parse --show-toplevel 2>/dev/null || echo /workspace)"
+	REPO_ROOT="$(git -C "$(dirname "${FIRST_FILE}")" rev-parse --show-toplevel 2>/dev/null || echo "$WORKSPACE_ROOT")"
 else
 	REPO_ROOT="/workspace"
 fi
@@ -199,8 +205,10 @@ echo "🔍 正在运行代码质量检查..."
 # 文件数量过多时,直接以 ${ALL_FILES} 展开成 argv 会超过 ARG_MAX(如根仓库 3 万+ 文件
 # ≈ 2.8MB > 2MB),触发 "Argument list too long"(E2BIG)。
 # 改为换行分隔经 xargs 按字节上限自动分批调用;任一批次失败即整体失败。
+# 用 `tr '\n' '\0' | xargs -0 -s` 而非 GNU 专有的 `xargs -d`/`-r`,兼容 macOS(BSD) xargs;
+# 空输入已在上面提前 exit 0,故无需 -r 的"空不执行"语义。
 TRUNK_BATCH_BYTES="${TRUNK_BATCH_BYTES:-131072}"
-if ! printf '%s\n' "${ALL_FILES}" | xargs -d '\n' -r -s "${TRUNK_BATCH_BYTES}" "${TRUNK_BIN}" check; then
+if ! printf '%s\n' "${ALL_FILES}" | tr '\n' '\0' | xargs -0 -s "${TRUNK_BATCH_BYTES}" "${TRUNK_BIN}" check; then
 	echo ""
 	echo "❌ 代码质量检查失败!"
 	echo ""