refactor: 简化 pnpm store 路径检测逻辑,直接使用 pnpm store path 命令

This commit is contained in:
Lyda
2025-10-13 10:41:09 +08:00
parent 5d48269745
commit fb2505d379
2 changed files with 13 additions and 65 deletions

View File

@@ -102,70 +102,22 @@ runs:
shell: bash
run: |
set -euo pipefail
DEFAULT_STORE="${RUNNER_TEMP:-$HOME}/.pnpm-store"
STORE_DIR_CANDIDATE="${PNPM_STORE_DIR:-${npm_config_store_dir:-}}"
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')
if ! command -v pnpm >/dev/null 2>&1; then
echo "❌ 未找到 pnpm请先通过 pnpm/action-setup 安装" >&2
exit 1
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
STORE_DIR_CANDIDATE="$DEFAULT_STORE"
echo "❌ pnpm store path 未返回有效路径。可在运行前设置 PNPM_STORE_DIR=/path/to/store 或检查 pnpm 配置" >&2
exit 1
fi
echo " Final store candidate: $STORE_DIR_CANDIDATE"
mkdir -p "$STORE_DIR_CANDIDATE"
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"
echo "pnpm store path: $STORE_DIR_CANDIDATE"
echo "PNPM_STORE_DIR=${STORE_DIR_CANDIDATE}" >> "$GITHUB_ENV"
echo "path=${STORE_DIR_CANDIDATE}" >> "$GITHUB_OUTPUT"
- name: 拉取缓存
id: cache