mirror of
https://git.bjxgj.com/xgj/xgj-actions.git
synced 2025-10-14 06:33:37 +08:00
refactor: 简化 pnpm store 路径检测逻辑,直接使用 pnpm store path 命令
This commit is contained in:
@@ -44,13 +44,9 @@
|
|||||||
|
|
||||||
## 🔁 缓存路径
|
## 🔁 缓存路径
|
||||||
|
|
||||||
Action 会根据以下优先级自动识别 pnpm store:
|
Action 会通过执行 `pnpm store path --silent` 获取当前 pnpm store 目录,并将结果写入日志与 `PNPM_STORE_DIR` 环境变量。
|
||||||
|
|
||||||
- 显式的 `PNPM_STORE_DIR` 或 `npm_config_store_dir` 环境变量
|
若命令未返回有效路径,可在调用前手动设置 `PNPM_STORE_DIR=/path/to/store` 以确保后续步骤正常运行。
|
||||||
- 项目/全局 `.npmrc` 中的 `store-dir=` 配置(支持相对路径自动展开)
|
|
||||||
- 若以上均不存在,退回 `${{ runner.temp }}/.pnpm-store`
|
|
||||||
|
|
||||||
解析完成后会打印 `pnpm store path: ...`,并将路径写入环境变量 `PNPM_STORE_DIR` 供后续步骤使用。
|
|
||||||
|
|
||||||
## ⚙️ 进阶配置
|
## ⚙️ 进阶配置
|
||||||
|
|
||||||
|
@@ -102,70 +102,22 @@ runs:
|
|||||||
shell: bash
|
shell: bash
|
||||||
run: |
|
run: |
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
DEFAULT_STORE="${RUNNER_TEMP:-$HOME}/.pnpm-store"
|
if ! command -v pnpm >/dev/null 2>&1; then
|
||||||
STORE_DIR_CANDIDATE="${PNPM_STORE_DIR:-${npm_config_store_dir:-}}"
|
echo "❌ 未找到 pnpm,请先通过 pnpm/action-setup 安装" >&2
|
||||||
|
exit 1
|
||||||
probe_config () {
|
|
||||||
local file="$1"
|
|
||||||
if [[ -n "$STORE_DIR_CANDIDATE" || -z "$file" || ! -f "$file" ]]; then
|
|
||||||
return
|
|
||||||
fi
|
|
||||||
local raw
|
|
||||||
raw=$(grep -E '^[[:space:]]*store-dir[[:space:]]*=' "$file" | tail -n1 | cut -d= -f2- || true)
|
|
||||||
if [[ -z "$raw" ]]; then
|
|
||||||
return
|
|
||||||
fi
|
|
||||||
raw=$(echo "$raw" | sed 's/^[[:space:]]*//;s/[[:space:]]*$//')
|
|
||||||
if [[ -z "$raw" ]]; then
|
|
||||||
return
|
|
||||||
fi
|
|
||||||
if [[ "$raw" == /* || "$raw" =~ ^[A-Za-z]:[\\/] ]]; then
|
|
||||||
STORE_DIR_CANDIDATE="$raw"
|
|
||||||
else
|
|
||||||
local base
|
|
||||||
base=$(cd "$(dirname "$file")" && pwd)
|
|
||||||
STORE_DIR_CANDIDATE="$base/$raw"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
probe_config "${NPM_CONFIG_USERCONFIG:-}"
|
|
||||||
echo "ℹ️ Checked userconfig: ${NPM_CONFIG_USERCONFIG:-<unset>} -> ${STORE_DIR_CANDIDATE:-<none>}"
|
|
||||||
probe_config ".npmrc"
|
|
||||||
echo "ℹ️ Checked project .npmrc -> ${STORE_DIR_CANDIDATE:-<none>}"
|
|
||||||
probe_config "$HOME/.npmrc"
|
|
||||||
echo "ℹ️ Checked home .npmrc -> ${STORE_DIR_CANDIDATE:-<none>}"
|
|
||||||
|
|
||||||
if [[ -z "$STORE_DIR_CANDIDATE" ]]; then
|
|
||||||
STORE_DIR_CANDIDATE=$(pnpm store path --silent 2>/dev/null || true)
|
|
||||||
STORE_DIR_CANDIDATE=$(echo "$STORE_DIR_CANDIDATE" | tail -n1 | tr -d '\r')
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
STORE_DIR_CANDIDATE=$(pnpm store path --silent 2>/dev/null || true)
|
||||||
|
STORE_DIR_CANDIDATE=$(echo "$STORE_DIR_CANDIDATE" | tail -n1 | tr -d '\r')
|
||||||
|
|
||||||
if [[ -z "$STORE_DIR_CANDIDATE" ]]; then
|
if [[ -z "$STORE_DIR_CANDIDATE" ]]; then
|
||||||
STORE_DIR_CANDIDATE="$DEFAULT_STORE"
|
echo "❌ pnpm store path 未返回有效路径。可在运行前设置 PNPM_STORE_DIR=/path/to/store 或检查 pnpm 配置" >&2
|
||||||
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "ℹ️ Final store candidate: $STORE_DIR_CANDIDATE"
|
echo "pnpm store path: $STORE_DIR_CANDIDATE"
|
||||||
|
echo "PNPM_STORE_DIR=${STORE_DIR_CANDIDATE}" >> "$GITHUB_ENV"
|
||||||
mkdir -p "$STORE_DIR_CANDIDATE"
|
echo "path=${STORE_DIR_CANDIDATE}" >> "$GITHUB_OUTPUT"
|
||||||
|
|
||||||
case "$STORE_DIR_CANDIDATE" in
|
|
||||||
/*)
|
|
||||||
CACHE_PATH="$STORE_DIR_CANDIDATE"
|
|
||||||
;;
|
|
||||||
~*)
|
|
||||||
CACHE_PATH="$(eval echo "$STORE_DIR_CANDIDATE")"
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
CACHE_PATH="$(cd "$STORE_DIR_CANDIDATE" 2>/dev/null && pwd)"
|
|
||||||
if [[ -z "$CACHE_PATH" ]]; then
|
|
||||||
CACHE_PATH="$STORE_DIR_CANDIDATE"
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
echo "pnpm store path: $CACHE_PATH"
|
|
||||||
echo "PNPM_STORE_DIR=${CACHE_PATH}" >> "$GITHUB_ENV"
|
|
||||||
echo "path=${CACHE_PATH}" >> "$GITHUB_OUTPUT"
|
|
||||||
|
|
||||||
- name: 拉取缓存
|
- name: 拉取缓存
|
||||||
id: cache
|
id: cache
|
||||||
|
Reference in New Issue
Block a user