fix: 移除冗余的项目级别store-dir配置,改用环境变量提示

This commit is contained in:
Lyda
2025-10-11 19:50:39 +08:00
parent 87fb296b8c
commit 9007eee842
2 changed files with 65 additions and 21 deletions

View File

@@ -10,11 +10,6 @@ inputs:
required: false
default: 'modules'
store-path:
description: '自定义 pnpm store 缓存路径(默认: runner 临时目录/.pnpm-store'
required: false
default: ''
force-install:
description: '是否强制安装 (true/false)'
required: false
@@ -78,12 +73,15 @@ runs:
env:
PNPM_VERSION: ${{ steps.detect.outputs.pnpm-version }}
FALLBACK_HASH: ${{ hashFiles('pnpm-lock.yaml') }}
PACKAGE_HASH: ${{ hashFiles('package.json') }}
run: |
set -euo pipefail
if [[ -n "${{ inputs.cache-hash }}" ]]; then
CACHE_HASH="${{ inputs.cache-hash }}"
elif [[ -n "${FALLBACK_HASH}" ]]; then
CACHE_HASH="${FALLBACK_HASH}"
elif [[ -n "${PACKAGE_HASH}" ]]; then
CACHE_HASH="${PACKAGE_HASH}"
else
CACHE_HASH=""
fi
@@ -105,13 +103,62 @@ runs:
run: |
set -euo pipefail
DEFAULT_STORE="${RUNNER_TEMP:-$HOME}/.pnpm-store"
if [[ -n "${{ inputs.store-path }}" ]]; then
CACHE_PATH="${{ inputs.store-path }}"
else
CACHE_PATH="$DEFAULT_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-)
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:-}"
probe_config ".npmrc"
probe_config "$HOME/.npmrc"
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
mkdir -p "$CACHE_PATH"
echo "pnpm store path: '$CACHE_PATH'"
if [[ -z "$STORE_DIR_CANDIDATE" ]]; then
STORE_DIR_CANDIDATE="$DEFAULT_STORE"
fi
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"
@@ -141,8 +188,7 @@ runs:
export PNPM_STORE_DIR="$STORE_DIR"
export npm_config_store_dir="$PNPM_STORE_DIR"
export PNPM_CONFIG_STORE_DIR="$PNPM_STORE_DIR"
pnpm config set store-dir "$PNPM_STORE_DIR" --location=project || true
pnpm config set store-dir "$PNPM_STORE_DIR" --location=global || true
echo "📦 Using PNPM_STORE_DIR=$PNPM_STORE_DIR"
if [[ -n "${{ inputs.install-command }}" ]]; then
echo "🔧 使用自定义安装命令: ${{ inputs.install-command }}"
eval "${{ inputs.install-command }}"