fix: 优化 setup-opencode action 的版本检测逻辑,改用包目录检测替代命令检测
- 版本检测改为检查全局包目录是否存在,避免包名与命令名不一致导致的误判 - 直接从包目录的 package.json 读取版本号,不再依赖 npm list 命令 - 使用 grep 正则匹配提取版本字段,支持不同格式的 JSON 空格 - 优化错误处理:package.json 不存在时版本标记为 unknown
This commit is contained in:
@@ -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}"
|
||||||
|
|||||||
Reference in New Issue
Block a user