mirror of
https://github.com/yanhao98/composite-actions.git
synced 2025-12-16 10:50:30 +08:00
更新 Node.js 版本解析逻辑,支持从 pnpm-workspace.yaml 读取版本配置
This commit is contained in:
@@ -60,6 +60,10 @@ jobs:
|
||||
- ''
|
||||
- |
|
||||
use-node-version=22.14.0 # https://pnpm.io/zh/npmrc#use-node-version
|
||||
pnpm_workspace_content:
|
||||
- ''
|
||||
- |
|
||||
useNodeVersion: 24.11.0 # https://pnpm.io/zh/settings#usenodeversion
|
||||
lock_file:
|
||||
- 'true'
|
||||
- 'false'
|
||||
@@ -72,6 +76,7 @@ jobs:
|
||||
run: |
|
||||
echo "🤖---- 打印 matrix ----🤖"
|
||||
echo "npmrc_content: ${{ matrix.npmrc_content }}"
|
||||
echo "pnpm_workspace_content: ${{ matrix.pnpm_workspace_content }}"
|
||||
echo "lock_file: ${{ matrix.lock_file }}"
|
||||
echo "cwd: ${{ matrix.cwd }}"
|
||||
echo "GITHUB_WORKSPACE: ${{ github.workspace }}"
|
||||
@@ -96,6 +101,18 @@ jobs:
|
||||
pwd
|
||||
cat .npmrc
|
||||
|
||||
- name: Create pnpm-workspace.yaml
|
||||
working-directory: ${{ matrix.cwd }}
|
||||
if: matrix.pnpm_workspace_content != ''
|
||||
run: |
|
||||
cat <<EOF > pnpm-workspace.yaml
|
||||
${{ matrix.pnpm_workspace_content }}
|
||||
EOF
|
||||
set -x;
|
||||
ls -l -R .
|
||||
pwd
|
||||
cat pnpm-workspace.yaml
|
||||
|
||||
- name: Create package.json
|
||||
working-directory: ${{ matrix.cwd }}
|
||||
run: |
|
||||
@@ -124,3 +141,46 @@ jobs:
|
||||
uses: yanhao98/composite-actions/setup-node-environment@main
|
||||
with:
|
||||
working-directory: ${{ matrix.cwd }}
|
||||
|
||||
- name: ✅ 验证安装结果
|
||||
working-directory: ${{ matrix.cwd }}
|
||||
run: |
|
||||
echo "🤖---- 验证 Node 和 PNPM 安装 ----🤖"
|
||||
echo "Node 版本: $(node --version)"
|
||||
echo "PNPM 版本: $(pnpm --version)"
|
||||
echo "PNPM 存储路径: $(pnpm store path)"
|
||||
|
||||
# 验证依赖是否安装
|
||||
if [ -d node_modules ]; then
|
||||
echo "✅ node_modules 已创建"
|
||||
ls -la node_modules/ | head -n 10
|
||||
else
|
||||
echo "❌ node_modules 未找到"
|
||||
# exit 1
|
||||
fi
|
||||
|
||||
# 验证 Node 版本是否符合预期
|
||||
node_version=$(node --version | cut -d'v' -f2 | cut -d'.' -f1)
|
||||
echo "当前 Node 主版本: $node_version"
|
||||
|
||||
# 根据配置验证版本
|
||||
if [ -n "${{ matrix.pnpm_workspace_content }}" ]; then
|
||||
echo "预期使用 pnpm-workspace.yaml 中的版本 (24)"
|
||||
if [ "$node_version" != "24" ]; then
|
||||
echo "❌ Node 版本不符合预期,应为 24,实际为 $node_version"
|
||||
# exit 1
|
||||
fi
|
||||
elif [ -n "${{ matrix.npmrc_content }}" ]; then
|
||||
echo "预期使用 .npmrc 中的版本 (22)"
|
||||
if [ "$node_version" != "22" ]; then
|
||||
echo "❌ Node 版本不符合预期,应为 22,实际为 $node_version"
|
||||
# exit 1
|
||||
fi
|
||||
else
|
||||
echo "预期使用默认 LTS 版本"
|
||||
# LTS 版本通常是 20, 22 等偶数版本
|
||||
if [ $((node_version % 2)) -ne 0 ]; then
|
||||
echo "⚠️ 警告: Node 版本 $node_version 可能不是 LTS 版本"
|
||||
fi
|
||||
fi
|
||||
echo "✅ Node 版本验证通过"
|
||||
|
||||
@@ -112,6 +112,26 @@ runs:
|
||||
# --- 5. 确定 Node.js 版本并清理 .npmrc ---
|
||||
echo "::group::⚙️ 确定 Node.js 版本并清理 .npmrc"
|
||||
node_version="lts/*" # 默认 Node 版本
|
||||
|
||||
# 从 pnpm-workspace.yaml 读取 useNodeVersion
|
||||
if [ -f pnpm-workspace.yaml ]; then
|
||||
echo "找到 pnpm-workspace.yaml 文件。"
|
||||
node_version_in_pnpm_workspace=$(sed -n 's/.*useNodeVersion:[[:space:]]*\([0-9.]*\).*/\1/p' pnpm-workspace.yaml | sed 's/[[:space:]]*#.*//')
|
||||
if [ -n "$node_version_in_pnpm_workspace" ]; then
|
||||
node_major_version_in_pnpm_workspace=$(echo "$node_version_in_pnpm_workspace" | cut -d. -f1)
|
||||
if [ -n "$node_major_version_in_pnpm_workspace" ]; then
|
||||
node_version="$node_major_version_in_pnpm_workspace"
|
||||
echo "pnpm-workspace.yaml 中指定的 Node 版本: $node_version_in_pnpm_workspace -> 使用主版本: $node_version"
|
||||
else
|
||||
echo "无法从 pnpm-workspace.yaml ($node_version_in_pnpm_workspace) 提取主 Node 版本。"
|
||||
fi
|
||||
else
|
||||
echo "pnpm-workspace.yaml 中未找到 'useNodeVersion'。"
|
||||
fi
|
||||
else
|
||||
echo "未找到 pnpm-workspace.yaml。"
|
||||
fi
|
||||
|
||||
if [ ! -f .npmrc ]; then
|
||||
echo "未找到 .npmrc,创建一个空文件。"
|
||||
touch .npmrc
|
||||
@@ -119,18 +139,20 @@ runs:
|
||||
echo "找到 .npmrc 文件。"
|
||||
fi
|
||||
|
||||
# 从 .npmrc 读取 use-node-version
|
||||
node_version_in_npmrc=$(sed -n 's/.*use-node-version=\([0-9.]*\).*/\1/p' .npmrc)
|
||||
if [ -n "$node_version_in_npmrc" ]; then
|
||||
node_major_version_in_npmrc=$(echo "$node_version_in_npmrc" | cut -d. -f1)
|
||||
if [ -n "$node_major_version_in_npmrc" ]; then
|
||||
node_version="$node_major_version_in_npmrc"
|
||||
echo ".npmrc 中指定的 Node 版本: $node_version_in_npmrc -> 使用主版本: $node_version"
|
||||
# 从 .npmrc 读取 use-node-version (如果 pnpm-workspace.yaml 未设置版本)
|
||||
if [ "$node_version" == "lts/*" ]; then
|
||||
node_version_in_npmrc=$(sed -n 's/.*use-node-version=\([0-9.]*\).*/\1/p' .npmrc)
|
||||
if [ -n "$node_version_in_npmrc" ]; then
|
||||
node_major_version_in_npmrc=$(echo "$node_version_in_npmrc" | cut -d. -f1)
|
||||
if [ -n "$node_major_version_in_npmrc" ]; then
|
||||
node_version="$node_major_version_in_npmrc"
|
||||
echo ".npmrc 中指定的 Node 版本: $node_version_in_npmrc -> 使用主版本: $node_version"
|
||||
else
|
||||
echo "无法从 .npmrc ($node_version_in_npmrc) 提取主 Node 版本。使用默认值: $node_version"
|
||||
fi
|
||||
else
|
||||
echo "无法从 .npmrc ($node_version_in_npmrc) 提取主 Node 版本。使用默认值: $node_version"
|
||||
echo ".npmrc 中未找到 'use-node-version'。使用默认值: $node_version"
|
||||
fi
|
||||
else
|
||||
echo ".npmrc 中未找到 'use-node-version'。使用默认值: $node_version"
|
||||
fi
|
||||
|
||||
# 清理 .npmrc:删除 use-node-version 和 node-mirror 行
|
||||
|
||||
Reference in New Issue
Block a user