@@ -29,22 +29,46 @@ jobs:
2929 - name : 📥 Checkout code
3030 uses : actions/checkout@v4
3131
32+ - name : Detect package manager
33+ id : detect-package-manager
34+ run : |
35+ if [ -f "${{ github.workspace }}/pnpm-lock.yaml" ]; then
36+ echo "manager=pnpm" >> $GITHUB_OUTPUT
37+ echo "command=install --frozen-lockfile" >> $GITHUB_OUTPUT
38+ exit 0
39+ elif [ -f "${{ github.workspace }}/yarn.lock" ]; then
40+ echo "manager=yarn" >> $GITHUB_OUTPUT
41+ echo "command=install" >> $GITHUB_OUTPUT
42+ exit 0
43+ elif [ -f "${{ github.workspace }}/package-lock.json" ]; then
44+ echo "manager=npm" >> $GITHUB_OUTPUT
45+ echo "command=ci" >> $GITHUB_OUTPUT
46+ exit 0
47+ else
48+ echo "Unable to determine package manager"
49+ exit 1
50+ fi
51+ - name : Setup pnpm
52+ if : steps.detect-package-manager.outputs.manager == 'pnpm'
53+ uses : pnpm/action-setup@v4
54+ with :
55+ version : 10.19.0
3256 - name : 📦 Setup Node.js
3357 uses : actions/setup-node@v4
3458 with :
3559 node-version : " 22"
36- cache : " npm "
60+ cache : ${{ steps.detect-package-manager.outputs.manager }}
3761
3862 - name : 📥 Install dependencies
39- run : npm ci
63+ run : ${{ steps.detect-package-manager.outputs.manager }} ${{ steps.detect-package-manager.outputs.command }}
4064
4165 - name : 🔒 Run security audit
4266 run : |
4367 echo "## 🔒 Security Audit Report" >> $GITHUB_STEP_SUMMARY
4468 echo "" >> $GITHUB_STEP_SUMMARY
4569
4670 # 运行安全审计
47- if npm audit --json > audit-report.json 2>/dev/null; then
71+ if ${{ steps.detect-package-manager.outputs.manager }} audit --json > audit-report.json 2>/dev/null; then
4872 # 解析审计结果
4973 vulnerabilities=$(node -e "
5074 const audit = require('./audit-report.json');
7498 echo "" >> $GITHUB_STEP_SUMMARY
7599 echo "⚠️ **Action Required**: $total_vulns security vulnerabilities found!" >> $GITHUB_STEP_SUMMARY
76100 echo "" >> $GITHUB_STEP_SUMMARY
77- echo "Run \`npm audit fix\` to automatically fix vulnerabilities." >> $GITHUB_STEP_SUMMARY
101+ echo "Run \`${{ steps.detect-package-manager.outputs.manager }} audit fix\` to automatically fix vulnerabilities." >> $GITHUB_STEP_SUMMARY
78102
79103 # 如果有高危或严重漏洞,创建 issue
80104 critical=$(echo $vulnerabilities | jq -r '.critical')
@@ -151,14 +175,38 @@ jobs:
151175 - name : 📥 Checkout code
152176 uses : actions/checkout@v4
153177
178+ - name : Detect package manager
179+ id : detect-package-manager
180+ run : |
181+ if [ -f "${{ github.workspace }}/pnpm-lock.yaml" ]; then
182+ echo "manager=pnpm" >> $GITHUB_OUTPUT
183+ echo "command=install --frozen-lockfile" >> $GITHUB_OUTPUT
184+ exit 0
185+ elif [ -f "${{ github.workspace }}/yarn.lock" ]; then
186+ echo "manager=yarn" >> $GITHUB_OUTPUT
187+ echo "command=install" >> $GITHUB_OUTPUT
188+ exit 0
189+ elif [ -f "${{ github.workspace }}/package-lock.json" ]; then
190+ echo "manager=npm" >> $GITHUB_OUTPUT
191+ echo "command=ci" >> $GITHUB_OUTPUT
192+ exit 0
193+ else
194+ echo "Unable to determine package manager"
195+ exit 1
196+ fi
197+ - name : Setup pnpm
198+ if : steps.detect-package-manager.outputs.manager == 'pnpm'
199+ uses : pnpm/action-setup@v4
200+ with :
201+ version : 10.19.0
154202 - name : 📦 Setup Node.js
155203 uses : actions/setup-node@v4
156204 with :
157205 node-version : " 22"
158- cache : " npm "
206+ cache : ${{ steps.detect-package-manager.outputs.manager }}
159207
160208 - name : 📥 Install dependencies
161- run : npm ci
209+ run : ${{ steps.detect-package-manager.outputs.manager }} ${{ steps.detect-package-manager.outputs.command }}
162210
163211 - name : 📋 Check for outdated packages
164212 id : check
@@ -167,7 +215,7 @@ jobs:
167215 echo "" >> $GITHUB_STEP_SUMMARY
168216
169217 # 检查过期的包
170- if npm outdated --json > outdated.json 2>/dev/null; then
218+ if ${{ steps.detect-package-manager.outputs.manager }} outdated --json > outdated.json 2>/dev/null; then
171219 if [ -s outdated.json ]; then
172220 echo "has-updates=true" >> $GITHUB_OUTPUT
173221
@@ -246,22 +294,22 @@ jobs:
246294 case $update_type in
247295 "patch")
248296 echo "Updating patch versions..." >> $GITHUB_STEP_SUMMARY
249- npm update --save
297+ ${{ steps.detect-package-manager.outputs.manager }} update
250298 ;;
251299 "minor")
252300 echo "Updating minor versions..." >> $GITHUB_STEP_SUMMARY
253301 npx npm-check-updates -u --target minor
254- npm install
302+ ${{ steps.detect-package-manager.outputs.manager }} install
255303 ;;
256304 "major")
257305 echo "Updating major versions..." >> $GITHUB_STEP_SUMMARY
258306 npx npm-check-updates -u --target major
259- npm install
307+ ${{ steps.detect-package-manager.outputs.manager }} install
260308 ;;
261309 "all")
262310 echo "Updating all versions..." >> $GITHUB_STEP_SUMMARY
263311 npx npm-check-updates -u
264- npm install
312+ ${{ steps.detect-package-manager.outputs.manager }} install
265313 ;;
266314 esac
267315
@@ -271,7 +319,7 @@ jobs:
271319 echo "" >> $GITHUB_STEP_SUMMARY
272320
273321 # 安装测试依赖
274- npm install --save-dev vitest jsdom @vitest/ui c8
322+ ${{ steps.detect-package-manager.outputs.manager }} add -D vitest jsdom @vitest/ui c8
275323
276324 # 运行测试
277325 if npx vitest run tests/utils/config-helpers*.test.ts --reporter=verbose; then
@@ -297,7 +345,7 @@ jobs:
297345 done
298346
299347 # 检查 package.json 的变更
300- if git diff --name-only | grep -q "package.json\|package-lock.json"; then
348+ if git diff --name-only | grep -q "package.json\|pnpm-lock.yaml\| package-lock.json\|yarn.lock "; then
301349 echo "" >> $GITHUB_STEP_SUMMARY
302350 echo "### Package Changes:" >> $GITHUB_STEP_SUMMARY
303351 echo "\`\`\`diff" >> $GITHUB_STEP_SUMMARY
@@ -393,23 +441,47 @@ jobs:
393441 - name : 📥 Checkout code
394442 uses : actions/checkout@v4
395443
444+ - name : Detect package manager
445+ id : detect-package-manager
446+ run : |
447+ if [ -f "${{ github.workspace }}/pnpm-lock.yaml" ]; then
448+ echo "manager=pnpm" >> $GITHUB_OUTPUT
449+ echo "command=install --frozen-lockfile" >> $GITHUB_OUTPUT
450+ exit 0
451+ elif [ -f "${{ github.workspace }}/yarn.lock" ]; then
452+ echo "manager=yarn" >> $GITHUB_OUTPUT
453+ echo "command=install" >> $GITHUB_OUTPUT
454+ exit 0
455+ elif [ -f "${{ github.workspace }}/package-lock.json" ]; then
456+ echo "manager=npm" >> $GITHUB_OUTPUT
457+ echo "command=ci" >> $GITHUB_OUTPUT
458+ exit 0
459+ else
460+ echo "Unable to determine package manager"
461+ exit 1
462+ fi
463+ - name : Setup pnpm
464+ if : steps.detect-package-manager.outputs.manager == 'pnpm'
465+ uses : pnpm/action-setup@v4
466+ with :
467+ version : 10.19.0
396468 - name : 📦 Setup Node.js
397469 uses : actions/setup-node@v4
398470 with :
399471 node-version : " 22"
400- cache : " npm "
472+ cache : ${{ steps.detect-package-manager.outputs.manager }}
401473
402474 - name : 📥 Install dependencies
403- run : npm ci
475+ run : ${{ steps.detect-package-manager.outputs.manager }} ${{ steps.detect-package-manager.outputs.command }}
404476
405477 - name : 📊 Generate dependency report
406478 run : |
407479 echo "# 📊 Dependency Analysis Report" >> $GITHUB_STEP_SUMMARY
408480 echo "" >> $GITHUB_STEP_SUMMARY
409481
410482 # 依赖统计
411- total_deps=$(npm list --depth=0 --json | jq '.dependencies | length')
412- dev_deps=$(npm list --depth=0 --dev --json | jq '.dependencies | length // 0')
483+ total_deps=$(${{ steps.detect-package-manager.outputs.manager }} list --depth=0 --json | jq '.dependencies | length')
484+ dev_deps=$(${{ steps.detect-package-manager.outputs.manager }} list --depth=0 --dev --json | jq '.dependencies | length // 0')
413485 prod_deps=$((total_deps - dev_deps))
414486
415487 echo "## 📈 Dependency Statistics" >> $GITHUB_STEP_SUMMARY
@@ -445,5 +517,5 @@ jobs:
445517 name : dependency-analysis-report
446518 path : |
447519 package.json
448- package -lock.json
520+ pnpm -lock.yaml
449521 retention-days : 30
0 commit comments