Compare commits
24 Commits
4495633411
...
ff48b8a3e8
| Author | SHA1 | Date | |
|---|---|---|---|
| ff48b8a3e8 | |||
| 23afeabe81 | |||
| 525abb55fb | |||
| 5aee9b954e | |||
| fb2505d379 | |||
| 5d48269745 | |||
| 9007eee842 | |||
| 87fb296b8c | |||
| 40ac71da27 | |||
| acea3c86c1 | |||
| 520bc406f4 | |||
| d4720de1a5 | |||
| cad99bbfc5 | |||
| df3a7e1eba | |||
| dc525a04b6 | |||
| 1aa9b20a79 | |||
| 4609366c51 | |||
| 3d246034c0 | |||
| bf094b92dd | |||
| b3ca961260 | |||
| ea1c69a371 | |||
| dfcf7e8c22 | |||
| 017d6705a2 | |||
| 12d3d5dc0d |
+15
-7
@@ -121,8 +121,14 @@ runs:
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# 模式后缀,隔离不同缓存模式(node_modules vs store)
|
# 模式后缀,隔离不同缓存模式(node_modules vs store)
|
||||||
MODE_SUFFIX="${{ inputs.cache-mode }}"
|
MODE_INPUT="${{ inputs.cache-mode }}"
|
||||||
if [[ -z "$MODE_SUFFIX" ]]; then MODE_SUFFIX="node_modules"; fi
|
ACTUAL_MODE="$MODE_INPUT"
|
||||||
|
if [[ "$MANAGER" == "npm" ]]; then
|
||||||
|
ACTUAL_MODE="node_modules"
|
||||||
|
elif [[ -z "$ACTUAL_MODE" ]]; then
|
||||||
|
ACTUAL_MODE="node_modules"
|
||||||
|
fi
|
||||||
|
MODE_SUFFIX="$ACTUAL_MODE"
|
||||||
|
|
||||||
# 构建缓存key:<OS>-<manager[-vX]>-<mode>-<prefix>-<hash>
|
# 构建缓存key:<OS>-<manager[-vX]>-<mode>-<prefix>-<hash>
|
||||||
CACHE_KEY="${{ runner.os }}-${MANAGER_SUFFIX}-${MODE_SUFFIX}-${{ inputs.cache-prefix }}-${CACHE_HASH_SHORT}"
|
CACHE_KEY="${{ runner.os }}-${MANAGER_SUFFIX}-${MODE_SUFFIX}-${{ inputs.cache-prefix }}-${CACHE_HASH_SHORT}"
|
||||||
@@ -130,6 +136,7 @@ runs:
|
|||||||
RESTORE_PREFIX="${{ runner.os }}-${MANAGER_SUFFIX}-${MODE_SUFFIX}-${{ inputs.cache-prefix }}-"
|
RESTORE_PREFIX="${{ runner.os }}-${MANAGER_SUFFIX}-${MODE_SUFFIX}-${{ inputs.cache-prefix }}-"
|
||||||
echo "key=${CACHE_KEY}" >> $GITHUB_OUTPUT
|
echo "key=${CACHE_KEY}" >> $GITHUB_OUTPUT
|
||||||
echo "restore-prefix=${RESTORE_PREFIX}" >> $GITHUB_OUTPUT
|
echo "restore-prefix=${RESTORE_PREFIX}" >> $GITHUB_OUTPUT
|
||||||
|
echo "mode=${ACTUAL_MODE}" >> $GITHUB_OUTPUT
|
||||||
echo "使用hash: ${CACHE_HASH}"
|
echo "使用hash: ${CACHE_HASH}"
|
||||||
echo "缓存key: ${CACHE_KEY}"
|
echo "缓存key: ${CACHE_KEY}"
|
||||||
|
|
||||||
@@ -144,7 +151,7 @@ runs:
|
|||||||
id: cache-path
|
id: cache-path
|
||||||
shell: bash
|
shell: bash
|
||||||
run: |
|
run: |
|
||||||
MODE="${{ inputs.cache-mode }}"
|
MODE="${{ steps.cache-key.outputs.mode }}"
|
||||||
MANAGER="${{ inputs.package-manager }}"
|
MANAGER="${{ inputs.package-manager }}"
|
||||||
if [[ -z "$MODE" ]]; then MODE="node_modules"; fi
|
if [[ -z "$MODE" ]]; then MODE="node_modules"; fi
|
||||||
|
|
||||||
@@ -200,7 +207,7 @@ runs:
|
|||||||
shell: bash
|
shell: bash
|
||||||
run: |
|
run: |
|
||||||
if [[ "${{ steps.cache.outputs.cache-hit }}" == "true" ]]; then
|
if [[ "${{ steps.cache.outputs.cache-hit }}" == "true" ]]; then
|
||||||
if [[ "${{ inputs.cache-mode }}" == "store" ]]; then
|
if [[ "${{ steps.cache-key.outputs.mode }}" == "store" ]]; then
|
||||||
echo "✅ 缓存命中(store),将执行快速链接安装(不会下载包,仅链接)"
|
echo "✅ 缓存命中(store),将执行快速链接安装(不会下载包,仅链接)"
|
||||||
else
|
else
|
||||||
echo "✅ 缓存命中,跳过依赖安装"
|
echo "✅ 缓存命中,跳过依赖安装"
|
||||||
@@ -210,12 +217,13 @@ runs:
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
- name: 安装依赖
|
- name: 安装依赖
|
||||||
if: (inputs.cache-mode == 'node_modules' && steps.cache.outputs.cache-hit != 'true') || (inputs.cache-mode == 'store')
|
if: (steps.cache-key.outputs.mode == 'node_modules' && steps.cache.outputs.cache-hit != 'true') || (steps.cache-key.outputs.mode == 'store')
|
||||||
shell: bash
|
shell: bash
|
||||||
run: |
|
run: |
|
||||||
|
ACTUAL_MODE="${{ steps.cache-key.outputs.mode }}"
|
||||||
# 若使用 pnpm,在本步骤内始终显式设置 PNPM_STORE_DIR(覆盖可能存在的相对配置)
|
# 若使用 pnpm,在本步骤内始终显式设置 PNPM_STORE_DIR(覆盖可能存在的相对配置)
|
||||||
if [[ "${{ inputs.package-manager }}" == "pnpm" ]]; then
|
if [[ "${{ inputs.package-manager }}" == "pnpm" ]]; then
|
||||||
if [[ "${{ inputs.cache-mode }}" == "store" ]]; then
|
if [[ "$ACTUAL_MODE" == "store" ]]; then
|
||||||
# store 模式:cache-path 的 path 即为期望的 store 目录
|
# store 模式:cache-path 的 path 即为期望的 store 目录
|
||||||
export PNPM_STORE_DIR="${{ steps.cache-path.outputs.path }}"
|
export PNPM_STORE_DIR="${{ steps.cache-path.outputs.path }}"
|
||||||
else
|
else
|
||||||
@@ -240,7 +248,7 @@ runs:
|
|||||||
fi
|
fi
|
||||||
# 根据模式与缓存命中优化安装参数(尽量离线加速)
|
# 根据模式与缓存命中优化安装参数(尽量离线加速)
|
||||||
EXTRA_FLAGS=""
|
EXTRA_FLAGS=""
|
||||||
if [[ "${{ inputs.optimize-install-flags }}" == "true" && "${{ inputs.package-manager }}" == "pnpm" && "${{ inputs.cache-mode }}" == "store" ]]; then
|
if [[ "${{ inputs.optimize-install-flags }}" == "true" && "${{ inputs.package-manager }}" == "pnpm" && "$ACTUAL_MODE" == "store" ]]; then
|
||||||
if [[ "${{ steps.cache.outputs.cache-hit }}" == "true" ]]; then
|
if [[ "${{ steps.cache.outputs.cache-hit }}" == "true" ]]; then
|
||||||
# 缓存命中:使用完全离线与锁定安装,避免网络请求
|
# 缓存命中:使用完全离线与锁定安装,避免网络请求
|
||||||
EXTRA_FLAGS="--offline --frozen-lockfile"
|
EXTRA_FLAGS="--offline --frozen-lockfile"
|
||||||
|
|||||||
+8
-22
@@ -1,11 +1,11 @@
|
|||||||
# pnpm 依赖安装与缓存 Action
|
# pnpm 依赖安装与缓存 Action
|
||||||
|
|
||||||
专为 pnpm 项目设计的 GitHub Action,通过缓存 `node_modules` 或 pnpm store,在 CI/CD 中实现快速复用,二次执行可在 10 秒内完成安装。
|
专为 pnpm 项目设计的 GitHub Action,通过缓存 pnpm store,在 CI/CD 中实现快速复用,二次执行可在 10 秒内完成安装。
|
||||||
|
|
||||||
## ✨ 特性
|
## ✨ 特性
|
||||||
|
|
||||||
- **专注 pnpm**:默认缓存 `node_modules`,命中后直接复用,无需重新链接
|
- **专注 pnpm**:缓存 pnpm store,命中后仅执行快速链接
|
||||||
- **双缓存模式**:可在 `node_modules` / `store` 之间切换,满足不同目录约束
|
- **离线友好**:自动根据缓存命中追加 `--offline`/`--prefer-offline`
|
||||||
- **锁文件准确性**:推荐传入 `cache-hash`(如 `hashFiles('pnpm-lock.yaml')`)确保缓存精准失效
|
- **锁文件准确性**:推荐传入 `cache-hash`(如 `hashFiles('pnpm-lock.yaml')`)确保缓存精准失效
|
||||||
- **自定义安装**:支持附加参数或完全覆盖安装命令,保留 `force-install` 选项
|
- **自定义安装**:支持附加参数或完全覆盖安装命令,保留 `force-install` 选项
|
||||||
- **环境整洁**:自动设置 `PNPM_STORE_DIR`,可选清理项目根 `.pnpm-store`
|
- **环境整洁**:自动设置 `PNPM_STORE_DIR`,可选清理项目根 `.pnpm-store`
|
||||||
@@ -14,9 +14,7 @@
|
|||||||
|
|
||||||
| 参数名 | 描述 | 必需 | 默认值 |
|
| 参数名 | 描述 | 必需 | 默认值 |
|
||||||
| --- | --- | --- | --- |
|
| --- | --- | --- | --- |
|
||||||
| `cache-mode` | 缓存模式:`node_modules` / `store` | 否 | `node_modules` |
|
|
||||||
| `cache-prefix` | 缓存 key 前缀 | 否 | `modules` |
|
| `cache-prefix` | 缓存 key 前缀 | 否 | `modules` |
|
||||||
| `node-modules-path` | `node_modules` 目录路径(仅 `cache-mode=node_modules` 时生效) | 否 | `node_modules` |
|
|
||||||
| `force-install` | 是否强制安装(追加 `--force`) | 否 | `false` |
|
| `force-install` | 是否强制安装(追加 `--force`) | 否 | `false` |
|
||||||
| `install-command` | 自定义安装命令,覆盖默认的 `pnpm install` | 否 | `''` |
|
| `install-command` | 自定义安装命令,覆盖默认的 `pnpm install` | 否 | `''` |
|
||||||
| `install-args` | 附加参数(仅默认命令时生效) | 否 | `''` |
|
| `install-args` | 附加参数(仅默认命令时生效) | 否 | `''` |
|
||||||
@@ -40,27 +38,15 @@
|
|||||||
cache-hash: ${{ hashFiles('pnpm-lock.yaml') }}
|
cache-hash: ${{ hashFiles('pnpm-lock.yaml') }}
|
||||||
```
|
```
|
||||||
|
|
||||||
- 默认缓存 `node_modules`,命中后直接跳过安装步骤,满足 10 秒内完成的目标。
|
- 默认缓存 pnpm store,命中后执行 `pnpm install --offline --frozen-lockfile`,通常在 10 秒内完成链接。
|
||||||
- 首次执行或 lock 文件变更时执行 `pnpm install --prefer-offline --frozen-lockfile`,完成后写入缓存。
|
- 首次执行或 lock 文件变更时执行 `pnpm install --prefer-offline --frozen-lockfile`,完成后写入缓存。
|
||||||
|
- 当未显式提供 `cache-hash` 时,会依次使用 `pnpm-lock.yaml`、`package.json` 计算 hash 作为兜底,确保缓存具备基本失效条件。
|
||||||
|
|
||||||
## 🔁 缓存模式
|
## 🔁 缓存路径
|
||||||
|
|
||||||
### `cache-mode: node_modules`(默认)
|
Action 会通过执行 `pnpm store path --silent` 获取当前 pnpm store 目录,并将结果写入日志与 `PNPM_STORE_DIR` 环境变量。
|
||||||
|
|
||||||
- **适用场景**:希望二次执行直接复用产物、编译型依赖较多。
|
若命令未返回有效路径,可在调用前手动设置 `PNPM_STORE_DIR=/path/to/store` 以确保后续步骤正常运行。
|
||||||
- **行为**:缓存 `node_modules` 指定目录。命中缓存后跳过安装步骤。
|
|
||||||
- **额外设定**:Action 会自动将 `pnpm node-linker` 设置为 `hoisted`,避免使用 symlink,生成更接近 npm 的目录结构。
|
|
||||||
|
|
||||||
### `cache-mode: store`
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
with:
|
|
||||||
cache-mode: store
|
|
||||||
cache-hash: ${{ hashFiles('pnpm-lock.yaml') }}
|
|
||||||
```
|
|
||||||
|
|
||||||
- **适用场景**:项目对 `node_modules` 目录结构有额外处理,或需要保持 `node_modules` 在工作目录内新生成。
|
|
||||||
- **行为**:缓存 `${{ runner.temp }}/.pnpm-store`。命中缓存后执行 `pnpm install --offline --frozen-lockfile`,仅进行符号链接操作。
|
|
||||||
|
|
||||||
## ⚙️ 进阶配置
|
## ⚙️ 进阶配置
|
||||||
|
|
||||||
|
|||||||
+37
-46
@@ -5,21 +5,11 @@ branding:
|
|||||||
color: 'yellow'
|
color: 'yellow'
|
||||||
|
|
||||||
inputs:
|
inputs:
|
||||||
cache-mode:
|
|
||||||
description: '缓存模式 (node_modules 或 store)'
|
|
||||||
required: false
|
|
||||||
default: 'node_modules'
|
|
||||||
|
|
||||||
cache-prefix:
|
cache-prefix:
|
||||||
description: '缓存前缀名称'
|
description: '缓存前缀名称'
|
||||||
required: false
|
required: false
|
||||||
default: 'modules'
|
default: 'modules'
|
||||||
|
|
||||||
node-modules-path:
|
|
||||||
description: 'node_modules目录路径(cache-mode=node_modules 时生效)'
|
|
||||||
required: false
|
|
||||||
default: 'node_modules'
|
|
||||||
|
|
||||||
force-install:
|
force-install:
|
||||||
description: '是否强制安装 (true/false)'
|
description: '是否强制安装 (true/false)'
|
||||||
required: false
|
required: false
|
||||||
@@ -83,12 +73,15 @@ runs:
|
|||||||
env:
|
env:
|
||||||
PNPM_VERSION: ${{ steps.detect.outputs.pnpm-version }}
|
PNPM_VERSION: ${{ steps.detect.outputs.pnpm-version }}
|
||||||
FALLBACK_HASH: ${{ hashFiles('pnpm-lock.yaml') }}
|
FALLBACK_HASH: ${{ hashFiles('pnpm-lock.yaml') }}
|
||||||
|
PACKAGE_HASH: ${{ hashFiles('package.json') }}
|
||||||
run: |
|
run: |
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
if [[ -n "${{ inputs.cache-hash }}" ]]; then
|
if [[ -n "${{ inputs.cache-hash }}" ]]; then
|
||||||
CACHE_HASH="${{ inputs.cache-hash }}"
|
CACHE_HASH="${{ inputs.cache-hash }}"
|
||||||
elif [[ -n "${FALLBACK_HASH}" ]]; then
|
elif [[ -n "${FALLBACK_HASH}" ]]; then
|
||||||
CACHE_HASH="${FALLBACK_HASH}"
|
CACHE_HASH="${FALLBACK_HASH}"
|
||||||
|
elif [[ -n "${PACKAGE_HASH}" ]]; then
|
||||||
|
CACHE_HASH="${PACKAGE_HASH}"
|
||||||
else
|
else
|
||||||
CACHE_HASH=""
|
CACHE_HASH=""
|
||||||
fi
|
fi
|
||||||
@@ -98,12 +91,8 @@ runs:
|
|||||||
CACHE_HASH_SHORT="no-hash"
|
CACHE_HASH_SHORT="no-hash"
|
||||||
fi
|
fi
|
||||||
PNPM_VERSION="${PNPM_VERSION}"
|
PNPM_VERSION="${PNPM_VERSION}"
|
||||||
MODE="${{ inputs.cache-mode }}"
|
CACHE_KEY="${{ runner.os }}-pnpm-v${PNPM_VERSION}-store-${{ inputs.cache-prefix }}-${CACHE_HASH_SHORT}"
|
||||||
if [[ -z "$MODE" ]]; then
|
RESTORE_PREFIX="${{ runner.os }}-pnpm-v${PNPM_VERSION}-store-${{ inputs.cache-prefix }}-"
|
||||||
MODE="node_modules"
|
|
||||||
fi
|
|
||||||
CACHE_KEY="${{ runner.os }}-pnpm-v${PNPM_VERSION}-${MODE}-${{ inputs.cache-prefix }}-${CACHE_HASH_SHORT}"
|
|
||||||
RESTORE_PREFIX="${{ runner.os }}-pnpm-v${PNPM_VERSION}-${MODE}-${{ inputs.cache-prefix }}-"
|
|
||||||
echo "key=${CACHE_KEY}" >> "$GITHUB_OUTPUT"
|
echo "key=${CACHE_KEY}" >> "$GITHUB_OUTPUT"
|
||||||
echo "restore-prefix=${RESTORE_PREFIX}" >> "$GITHUB_OUTPUT"
|
echo "restore-prefix=${RESTORE_PREFIX}" >> "$GITHUB_OUTPUT"
|
||||||
echo "hash=${CACHE_HASH}" >> "$GITHUB_OUTPUT"
|
echo "hash=${CACHE_HASH}" >> "$GITHUB_OUTPUT"
|
||||||
@@ -113,20 +102,22 @@ runs:
|
|||||||
shell: bash
|
shell: bash
|
||||||
run: |
|
run: |
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
MODE="${{ inputs.cache-mode }}"
|
if ! command -v pnpm >/dev/null 2>&1; then
|
||||||
if [[ -z "$MODE" ]]; then
|
echo "❌ 未找到 pnpm,请先通过 pnpm/action-setup 安装" >&2
|
||||||
MODE="node_modules"
|
exit 1
|
||||||
fi
|
fi
|
||||||
if [[ "$MODE" == "node_modules" ]]; then
|
|
||||||
CACHE_PATH="${{ inputs.node-modules-path }}"
|
STORE_DIR_CANDIDATE=$(pnpm store path --silent 2>/dev/null || true)
|
||||||
STORE_DIR="${RUNNER_TEMP:-$HOME}/.pnpm-store"
|
STORE_DIR_CANDIDATE=$(echo "$STORE_DIR_CANDIDATE" | tail -n1 | tr -d '\r')
|
||||||
else
|
|
||||||
STORE_DIR="${RUNNER_TEMP:-$HOME}/.pnpm-store"
|
if [[ -z "$STORE_DIR_CANDIDATE" ]]; then
|
||||||
CACHE_PATH="$STORE_DIR"
|
echo "❌ pnpm store path 未返回有效路径。可在运行前设置 PNPM_STORE_DIR=/path/to/store 或检查 pnpm 配置" >&2
|
||||||
|
exit 1
|
||||||
fi
|
fi
|
||||||
mkdir -p "$STORE_DIR"
|
|
||||||
echo "PNPM_STORE_DIR=${STORE_DIR}" >> "$GITHUB_ENV"
|
echo "pnpm store path: $STORE_DIR_CANDIDATE"
|
||||||
echo "path=${CACHE_PATH}" >> "$GITHUB_OUTPUT"
|
echo "PNPM_STORE_DIR=${STORE_DIR_CANDIDATE}" >> "$GITHUB_ENV"
|
||||||
|
echo "path=${STORE_DIR_CANDIDATE}" >> "$GITHUB_OUTPUT"
|
||||||
|
|
||||||
- name: 拉取缓存
|
- name: 拉取缓存
|
||||||
id: cache
|
id: cache
|
||||||
@@ -147,46 +138,46 @@ runs:
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
- name: 安装依赖
|
- name: 安装依赖
|
||||||
if: (inputs.cache-mode == 'node_modules' && steps.cache.outputs.cache-hit != 'true') || (inputs.cache-mode == 'store')
|
|
||||||
shell: bash
|
shell: bash
|
||||||
run: |
|
run: |
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
export PNPM_STORE_DIR="${PNPM_STORE_DIR:-${RUNNER_TEMP:-$HOME}/.pnpm-store}"
|
STORE_DIR="${PNPM_STORE_DIR:-${{ steps.cache-path.outputs.path }}}"
|
||||||
|
export PNPM_STORE_DIR="$STORE_DIR"
|
||||||
export npm_config_store_dir="$PNPM_STORE_DIR"
|
export npm_config_store_dir="$PNPM_STORE_DIR"
|
||||||
export PNPM_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
|
echo "📦 Using PNPM_STORE_DIR=$PNPM_STORE_DIR"
|
||||||
if [[ "${{ inputs.cache-mode }}" == "node_modules" ]]; then
|
|
||||||
export PNPM_NODE_LINKER="hoisted"
|
|
||||||
pnpm config set node-linker hoisted --location=project || true
|
|
||||||
pnpm config set node-linker hoisted --location=global || true
|
|
||||||
echo "🔧 已将 pnpm node-linker 设置为 hoisted,避免 symlink"
|
|
||||||
fi
|
|
||||||
if [[ -n "${{ inputs.install-command }}" ]]; then
|
if [[ -n "${{ inputs.install-command }}" ]]; then
|
||||||
echo "🔧 使用自定义安装命令: ${{ inputs.install-command }}"
|
echo "🔧 使用自定义安装命令: ${{ inputs.install-command }}"
|
||||||
eval "${{ inputs.install-command }}"
|
eval "${{ inputs.install-command }}"
|
||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
FLAGS=("--frozen-lockfile")
|
if [[ "${{ steps.cache.outputs.cache-hit }}" == "true" ]]; then
|
||||||
if [[ "${{ inputs.cache-mode }}" == "store" ]]; then
|
FLAGS=("--offline" "--frozen-lockfile")
|
||||||
if [[ "${{ steps.cache.outputs.cache-hit }}" == "true" ]]; then
|
else
|
||||||
FLAGS=("--offline" "--frozen-lockfile")
|
FLAGS=("--prefer-offline" "--frozen-lockfile")
|
||||||
else
|
|
||||||
FLAGS=("--prefer-offline" "--frozen-lockfile")
|
|
||||||
fi
|
|
||||||
fi
|
fi
|
||||||
if [[ "${{ inputs.force-install }}" == "true" ]]; then
|
if [[ "${{ inputs.force-install }}" == "true" ]]; then
|
||||||
FLAGS+=("--force")
|
FLAGS+=("--force")
|
||||||
fi
|
fi
|
||||||
INSTALL_ARGS="${{ inputs.install-args }}"
|
INSTALL_ARGS="${{ inputs.install-args }}"
|
||||||
echo "🔧 执行 pnpm install ${FLAGS[*]} ${INSTALL_ARGS}"
|
echo "🔧 执行 pnpm install ${FLAGS[*]} ${INSTALL_ARGS}"
|
||||||
if [[ -n "$INSTALL_ARGS" ]]; then
|
if [[ -n "$INSTALL_ARGS" ]]; then
|
||||||
pnpm install "${FLAGS[@]}" $INSTALL_ARGS
|
pnpm install "${FLAGS[@]}" $INSTALL_ARGS
|
||||||
else
|
else
|
||||||
pnpm install "${FLAGS[@]}"
|
pnpm install "${FLAGS[@]}"
|
||||||
fi
|
fi
|
||||||
if [[ "${{ inputs.clean-project-store }}" == "true" && -d ".pnpm-store" && "${PNPM_STORE_DIR}" != "$PWD/.pnpm-store" ]]; then
|
if [[ "${{ inputs.clean-project-store }}" == "true" && -d ".pnpm-store" && "$(cd "$PNPM_STORE_DIR" 2>/dev/null && pwd)" != "$(cd .pnpm-store 2>/dev/null && pwd)" ]]; then
|
||||||
rm -rf .pnpm-store || true
|
rm -rf .pnpm-store || true
|
||||||
fi
|
fi
|
||||||
|
echo "🧾 git status --short"
|
||||||
|
CHANGES=$(git status --short || true)
|
||||||
|
if [[ -n "$CHANGES" ]]; then
|
||||||
|
echo "$CHANGES"
|
||||||
|
echo "❌ 安装依赖后检测到工作区存在未提交变更。请检查上述文件,必要时更新配置或在调用前设置 PNPM_STORE_DIR。" >&2
|
||||||
|
exit 1
|
||||||
|
else
|
||||||
|
echo "✅ 工作区保持干净"
|
||||||
|
fi
|
||||||
|
|
||||||
- name: 总结
|
- name: 总结
|
||||||
shell: bash
|
shell: bash
|
||||||
|
|||||||
@@ -101,7 +101,7 @@ runs:
|
|||||||
/usr/libexec/docker/cli-plugins/docker-buildx
|
/usr/libexec/docker/cli-plugins/docker-buildx
|
||||||
/usr/libexec/docker/cli-plugins/docker-compose
|
/usr/libexec/docker/cli-plugins/docker-compose
|
||||||
/usr/bin/kubectl
|
/usr/bin/kubectl
|
||||||
key: ${{ runner.os }}-${{ inputs.cache-key }}-${{ hashFiles('**/action.yml') }}-v2
|
key: ${{ runner.os }}-${{ inputs.cache-key }}-${{ hashFiles('**/action.yml') }}-v3
|
||||||
restore-keys: |
|
restore-keys: |
|
||||||
${{ runner.os }}-${{ inputs.cache-key }}-
|
${{ runner.os }}-${{ inputs.cache-key }}-
|
||||||
|
|
||||||
|
|||||||
@@ -101,7 +101,7 @@ install_docker() {
|
|||||||
# 更新源并安装 Docker
|
# 更新源并安装 Docker
|
||||||
apt-get update
|
apt-get update
|
||||||
apt-get install -y \
|
apt-get install -y \
|
||||||
docker-ce-cli \
|
docker-ce-cli=5:20.10.21~3-0~debian-bullseye \
|
||||||
docker-buildx-plugin \
|
docker-buildx-plugin \
|
||||||
docker-compose-plugin
|
docker-compose-plugin
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user