Compare commits

..

27 Commits

Author SHA1 Message Date
Lyda 595d906213 Merge branch 'v1' 2026-03-11 11:01:23 +08:00
Lyda 0535fe327b fix: 更新 Git 默认用户邮箱从 actions@gitea.com 改为 xgj-actions@xmail.bjxgj.com 2026-03-11 11:01:15 +08:00
Lyda ddd5d83eb2 fix: 更新 Docker 仓库默认用户名从 ci-action 改为 GiteaDocker 2026-03-10 16:14:15 +08:00
Lyda ff48b8a3e8 Merge branch 'v1' 2025-11-17 16:00:00 +08:00
Lyda 23afeabe81 fix: 锁定 docker-ce-cli 版本为 5:20.10.21 并更新缓存版本至 v3 2025-11-17 15:59:31 +08:00
Lyda 525abb55fb fix: 强制 npm 使用 node_modules 缓存模式并优化缓存模式处理逻辑 2025-10-13 11:54:59 +08:00
Lyda 5aee9b954e feat: 添加依赖安装后工作区变更检测及错误提示 2025-10-13 11:32:28 +08:00
Lyda fb2505d379 refactor: 简化 pnpm store 路径检测逻辑,直接使用 pnpm store path 命令 2025-10-13 10:41:09 +08:00
Lyda 5d48269745 fix: 增加pnpm store-dir探测日志并修复grep命令失败时的错误 2025-10-11 19:52:45 +08:00
Lyda 9007eee842 fix: 移除冗余的项目级别store-dir配置,改用环境变量提示 2025-10-11 19:50:39 +08:00
Lyda 87fb296b8c feat: 添加git status命令以显示工作目录状态 2025-10-11 19:35:20 +08:00
Lyda 40ac71da27 refactor: 简化pnpm存储路径的日志输出 2025-10-11 19:30:50 +08:00
Lyda acea3c86c1 refactor: 移除 node_modules 缓存模式,仅保留 pnpm store 缓存策略 2025-10-11 19:25:35 +08:00
Lyda 520bc406f4 Merge branch 'v1' 2025-08-21 12:49:53 +08:00
Lyda d4720de1a5 Merge branch 'v1' 2025-08-21 12:32:18 +08:00
Lyda cad99bbfc5 Merge branch 'v1' 2025-08-21 12:23:08 +08:00
Lyda df3a7e1eba Merge branch 'v1' 2025-08-21 12:00:25 +08:00
Lyda dc525a04b6 Merge branch 'v1' 2025-08-21 11:59:21 +08:00
Lyda 1aa9b20a79 Merge branch 'v1' 2025-08-21 10:14:39 +08:00
Lyda 4609366c51 Merge branch 'v1' 2025-08-20 20:38:43 +08:00
Lyda 3d246034c0 Merge branch 'v1' 2025-08-20 19:30:03 +08:00
Lyda bf094b92dd Merge branch 'v1' 2025-08-20 18:39:48 +08:00
Lyda b3ca961260 Merge branch 'v1' 2025-08-20 17:53:53 +08:00
Lyda ea1c69a371 Merge branch 'v1' 2025-08-20 17:38:25 +08:00
Lyda dfcf7e8c22 Merge branch 'v1' 2025-08-20 17:26:23 +08:00
Lyda 017d6705a2 Merge branch 'v1' 2025-08-20 17:13:06 +08:00
Lyda 12d3d5dc0d feat: 更新 npm-install GitHub Action,重构锁文件处理逻辑,优化缓存key生成步骤,增加对锁文件不存在的警告提示。 2025-08-20 15:16:57 +08:00
9 changed files with 68 additions and 83 deletions
+1 -1
View File
@@ -19,7 +19,7 @@
| `kube-config` | Base64 编码的 kubeconfig | ❌ | `''` | | `kube-config` | Base64 编码的 kubeconfig | ❌ | `''` |
| `enable-validation` | 是否执行环境校验 (`true`/`false`) | ❌ | `true` | | `enable-validation` | 是否执行环境校验 (`true`/`false`) | ❌ | `true` |
| `docker-registry` | Docker 私有仓库地址 | ❌ | `docker-registry.bjxgj.com` | | `docker-registry` | Docker 私有仓库地址 | ❌ | `docker-registry.bjxgj.com` |
| `docker-username` | Docker 仓库用户名 | ❌ | `ci-action` | | `docker-username` | Docker 仓库用户名 | ❌ | `GiteaDocker` |
| `docker-password` | Docker 仓库密码(当未跳过登录时必填) | ❌ | `''` | | `docker-password` | Docker 仓库密码(当未跳过登录时必填) | ❌ | `''` |
| `skip-docker-login` | 是否跳过 Docker 登录 (`true`/`false`) | ❌ | `false` | | `skip-docker-login` | 是否跳过 Docker 登录 (`true`/`false`) | ❌ | `false` |
+2 -2
View File
@@ -14,7 +14,7 @@ inputs:
git-user-email: git-user-email:
description: 'Git 用户邮箱' description: 'Git 用户邮箱'
required: false required: false
default: 'actions@gitea.com' default: 'xgj-actions@xmail.bjxgj.com'
kube-config: kube-config:
description: 'Base64 编码的 kubectl 配置文件' description: 'Base64 编码的 kubectl 配置文件'
required: false required: false
@@ -30,7 +30,7 @@ inputs:
docker-username: docker-username:
description: 'Docker 仓库用户名' description: 'Docker 仓库用户名'
required: false required: false
default: 'ci-action' default: 'GiteaDocker'
docker-password: docker-password:
description: 'Docker 仓库密码(开启登录时必填)' description: 'Docker 仓库密码(开启登录时必填)'
required: false required: false
+15 -7
View File
@@ -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
View File
@@ -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
View File
@@ -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
+1 -1
View File
@@ -18,7 +18,7 @@
| 参数名 | 描述 | 必填 | 默认值 | | 参数名 | 描述 | 必填 | 默认值 |
| ------------------- | ------------------------------ | ---- | --------------------------- | | ------------------- | ------------------------------ | ---- | --------------------------- |
| `docker-registry` | Docker 私有仓库地址 | ❌ | `docker-registry.bjxgj.com` | | `docker-registry` | Docker 私有仓库地址 | ❌ | `docker-registry.bjxgj.com` |
| `docker-username` | Docker 仓库用户名 | ❌ | `ci-action` | | `docker-username` | Docker 仓库用户名 | ❌ | `GiteaDocker` |
| `docker-password` | Docker 仓库密码 | ✅ | - | | `docker-password` | Docker 仓库密码 | ✅ | - |
| `kube-config` | Base64 编码的 kubectl 配置文件 | ❌ | `''` | | `kube-config` | Base64 编码的 kubectl 配置文件 | ❌ | `''` |
| `cache-key` | 缓存键值 | ❌ | `setup-env` | | `cache-key` | 缓存键值 | ❌ | `setup-env` |
+2 -2
View File
@@ -15,7 +15,7 @@ inputs:
docker-username: docker-username:
description: 'Docker 仓库用户名' description: 'Docker 仓库用户名'
required: false required: false
default: 'ci-action' default: 'GiteaDocker'
docker-password: docker-password:
description: 'Docker 仓库密码' description: 'Docker 仓库密码'
@@ -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 }}-
+1 -1
View File
@@ -32,7 +32,7 @@ jobs:
uses: actions/xgj/setup-env@v1 uses: actions/xgj/setup-env@v1
with: with:
docker-registry: ${{ env.REGISTRY }} docker-registry: ${{ env.REGISTRY }}
docker-username: ci-action docker-username: GiteaDocker
docker-password: ${{ secrets.DOCKER_PASSWORD }} docker-password: ${{ secrets.DOCKER_PASSWORD }}
cache-key: 'build-${{ github.sha }}' cache-key: 'build-${{ github.sha }}'
use-aliyun-mirror: 'true' use-aliyun-mirror: 'true'
+1 -1
View File
@@ -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