From 0e3519f994e2027ca5a1204b19e6d465f8c7f61d Mon Sep 17 00:00:00 2001 From: Lyda <1829913225@qq.com> Date: Tue, 17 Mar 2026 16:31:03 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BC=98=E5=8C=96=20setup-opencode=20ac?= =?UTF-8?q?tion=20=E7=9A=84=E5=8C=85=E5=AE=89=E8=A3=85=E9=AA=8C=E8=AF=81?= =?UTF-8?q?=E9=80=BB=E8=BE=91=EF=BC=8C=E4=BD=BF=E7=94=A8=20npm=20list=20?= =?UTF-8?q?=E6=9B=BF=E4=BB=A3=E5=91=BD=E4=BB=A4=E6=A3=80=E6=B5=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 安装验证改用 npm list 检查包是否存在,避免包名与命令名不一致导致的误判 - 验证成功时显示已安装版本号,并尝试列出 bin 目录中的可用命令 - 版本检测逻辑简化,统一使用 npm list JSON 输出获取版本信息 - 优化错误提示,明确显示未找到的包名 - 移除备用的命令行版本检测方案,统一使用 npm 元数据 --- setup-opencode/action.yml | 34 +++++++++++++++++++++------------- 1 file changed, 21 insertions(+), 13 deletions(-) diff --git a/setup-opencode/action.yml b/setup-opencode/action.yml index c50ee6a..7e0529d 100644 --- a/setup-opencode/action.yml +++ b/setup-opencode/action.yml @@ -221,12 +221,25 @@ runs: run: | PACKAGE="${{ inputs.package-name }}" - if command -v $PACKAGE &> /dev/null; then + # 通过 npm list 检查包是否安装,而不是检查命令(因为包名和命令名可能不同) + 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 "") + + if [[ -n "${INSTALLED_VERSION}" ]]; then echo "install-verified=true" >> $GITHUB_OUTPUT - echo "✅ 安装验证成功" + echo "✅ 安装验证成功 - 版本: ${INSTALLED_VERSION}" + + # 尝试查找实际的命令名 + BIN_DIR="${{ steps.npm-paths.outputs.prefix }}/bin" + if [[ -d "${BIN_DIR}" ]]; then + COMMANDS=$(ls -1 "${BIN_DIR}" 2>/dev/null | grep -i opencode || echo "") + if [[ -n "${COMMANDS}" ]]; then + echo "📦 可用命令: ${COMMANDS}" + fi + fi else echo "install-verified=false" >> $GITHUB_OUTPUT - echo "❌ 安装验证失败" + echo "❌ 安装验证失败 - 未找到包 ${PACKAGE}" exit 1 fi @@ -246,16 +259,11 @@ runs: run: | PACKAGE="${{ inputs.package-name }}" - if command -v $PACKAGE &> /dev/null; then - # 使用 JSON 格式获取版本,更可靠 - INSTALLED_INFO=$(npm list -g $PACKAGE --json --depth=0 2>/dev/null || echo '{}') - VERSION=$(echo "${INSTALLED_INFO}" | grep -o '"version":"[^"]*"' | head -1 | cut -d'"' -f4 || echo "unknown") - - if [[ "${VERSION}" == "unknown" ]]; then - # 备用方案:直接运行命令获取版本 - VERSION=$($PACKAGE --version 2>/dev/null | grep -oE '[0-9]+\.[0-9]+\.[0-9]+' | head -1 || echo "unknown") - fi - + # 使用 JSON 格式获取版本,更可靠 + INSTALLED_INFO=$(npm list -g $PACKAGE --json --depth=0 2>/dev/null || echo '{}') + VERSION=$(echo "${INSTALLED_INFO}" | grep -o '"version":"[^"]*"' | head -1 | cut -d'"' -f4 || echo "unknown") + + if [[ "${VERSION}" != "unknown" ]]; then echo "version=${VERSION}" >> $GITHUB_OUTPUT echo "✅ OpenCode 版本: ${VERSION}" else