fix: 优化 setup-opencode action 的版本检测逻辑,改用包目录检测替代命令检测

- 版本检测改为检查全局包目录是否存在,避免包名与命令名不一致导致的误判
- 直接从包目录的 package.json 读取版本号,不再依赖 npm list 命令
- 使用 grep 正则匹配提取版本字段,支持不同格式的 JSON 空格
- 优化错误处理:package.json 不存在时版本标记为 unknown
This commit is contained in:
Lyda
2026-03-17 17:32:27 +08:00
parent 6789baf675
commit 2069d7e1e9
+12 -4
View File
@@ -160,12 +160,20 @@ runs:
run: | run: |
PACKAGE="${{ inputs.package-name }}" PACKAGE="${{ inputs.package-name }}"
TARGET_VERSION="${{ steps.resolve-version.outputs.version }}" TARGET_VERSION="${{ steps.resolve-version.outputs.version }}"
GLOBAL_ROOT="${{ steps.npm-paths.outputs.global-root }}"
NEED_INSTALL="true" NEED_INSTALL="true"
if command -v $PACKAGE &> /dev/null; then # 检查包目录是否存在(更可靠,不依赖命令名)
# 使用 JSON 格式获取版本信息,更可靠 PACKAGE_DIR="${GLOBAL_ROOT}/${PACKAGE}"
INSTALLED_INFO=$(npm list -g $PACKAGE --json --depth=0 2>/dev/null || echo '{}')
INSTALLED_VERSION=$(echo "${INSTALLED_INFO}" | grep -o '"version":"[^"]*"' | head -1 | cut -d'"' -f4 || echo "unknown") if [[ -d "${PACKAGE_DIR}" ]]; then
# 从 package.json 获取版本
PACKAGE_JSON="${PACKAGE_DIR}/package.json"
if [[ -f "${PACKAGE_JSON}" ]]; then
INSTALLED_VERSION=$(grep -o '"version"[[:space:]]*:[[:space:]]*"[^"]*"' "${PACKAGE_JSON}" | head -1 | cut -d'"' -f4 || echo "unknown")
else
INSTALLED_VERSION="unknown"
fi
echo "📦 已安装版本: ${INSTALLED_VERSION}" echo "📦 已安装版本: ${INSTALLED_VERSION}"
echo "🎯 目标版本: ${TARGET_VERSION}" echo "🎯 目标版本: ${TARGET_VERSION}"