feat: 更新 npm-install GitHub Action,移除 lockfile-name 输入参数,添加 cache-hash 参数以支持自定义缓存 hash,优化锁文件处理逻辑,确保在未提供 hash 时使用 package.json 作为 fallback,提升缓存管理的灵活性和可靠性,同时更新文档以反映新功能和使用示例。

This commit is contained in:
Lyda
2025-08-21 10:34:47 +08:00
parent 75b194bdfb
commit 3f3997c5dc
3 changed files with 181 additions and 45 deletions

View File

@@ -10,11 +10,7 @@ inputs:
required: false
default: 'npm'
lockfile-name:
description: 'lock文件名称'
required: false
default: 'package-lock.json'
cache-prefix:
description: '缓存前缀名称'
required: false
@@ -39,6 +35,11 @@ inputs:
description: '自定义安装命令(可选,会覆盖默认命令)'
required: false
default: ''
cache-hash:
description: '缓存hash值推荐使用hashFiles计算'
required: false
default: "hashFiles('pnpm-lock.yaml')"
outputs:
cache-hit:
@@ -56,49 +57,32 @@ runs:
id: cache-key
shell: bash
env:
NPM_HASH: ${{ hashFiles('package-lock.json') }}
PNPM_HASH: ${{ hashFiles('pnpm-lock.yaml') }}
YARN_HASH: ${{ hashFiles('yarn.lock') }}
FALLBACK_HASH: ${{ hashFiles('package.json') }}
run: |
# 根据包管理器确定锁文件和对应的hash
case "${{ inputs.package-manager }}" in
"npm")
if [[ "${{ inputs.lockfile-name }}" != "package-lock.json" ]]; then
LOCKFILE="${{ inputs.lockfile-name }}"
LOCKFILE_HASH="${NPM_HASH}"
else
LOCKFILE="package-lock.json"
LOCKFILE_HASH="${NPM_HASH}"
fi
;;
"pnpm")
LOCKFILE="pnpm-lock.yaml"
LOCKFILE_HASH="${PNPM_HASH}"
;;
"yarn")
LOCKFILE="yarn.lock"
LOCKFILE_HASH="${YARN_HASH}"
;;
*)
LOCKFILE="${{ inputs.lockfile-name }}"
# 对于自定义情况使用npm hash作为默认
LOCKFILE_HASH="${NPM_HASH}"
;;
esac
# 截取hash的前12位
if [[ -n "${LOCKFILE_HASH}" && "${LOCKFILE_HASH}" != "" ]]; then
LOCKFILE_HASH_SHORT=$(echo "${LOCKFILE_HASH}" | head -c 12)
# 确定使用的hash
if [[ -n "${{ inputs.cache-hash }}" && "${{ inputs.cache-hash }}" != "" ]]; then
CACHE_HASH="${{ inputs.cache-hash }}"
echo "✅ 使用用户传入的hash值"
elif [[ -n "${FALLBACK_HASH}" && "${FALLBACK_HASH}" != "" ]]; then
CACHE_HASH="${FALLBACK_HASH}"
echo "📝 未提供hash使用package.json作为fallback"
else
echo "⚠️ 警告: 无法计算锁文件hash使用默认值"
LOCKFILE_HASH_SHORT="no-lockfile"
CACHE_HASH=""
echo "⚠️ 警告: 无法获取hash值使用默认值"
fi
CACHE_KEY="${{ runner.os }}-${{ inputs.cache-prefix }}-${LOCKFILE_HASH_SHORT}"
# 截取hash的前12位
if [[ -n "${CACHE_HASH}" && "${CACHE_HASH}" != "" ]]; then
CACHE_HASH_SHORT=$(echo "${CACHE_HASH}" | head -c 12)
echo "✅ 成功计算缓存hash: ${CACHE_HASH_SHORT}"
else
CACHE_HASH_SHORT="no-hash"
echo "⚠️ 使用默认hash值: ${CACHE_HASH_SHORT}"
fi
CACHE_KEY="${{ runner.os }}-${{ inputs.cache-prefix }}-${CACHE_HASH_SHORT}"
echo "key=${CACHE_KEY}" >> $GITHUB_OUTPUT
echo "lockfile=${LOCKFILE}" >> $GITHUB_OUTPUT
echo "使用锁文件: ${LOCKFILE}"
echo "文件hash: ${LOCKFILE_HASH}"
echo "使用hash: ${CACHE_HASH}"
echo "缓存key: ${CACHE_KEY}"
- name: 拉取缓存依赖