关于 pnpm-upgrade
pnpm-upgrade 是用于更新 pnpm 工具链及 CI 固定版本的仓库 Skill,包含发布版本与完整性检查,并指导预检、配置修改和验证。
主要功能
- 01解析 pnpm 版本与完整性
- 02将 action-setup 固定到提交 SHA
- 03预检 CI 安装路径
- 04更新 packageManager 与工作流
- 05验证工具链及预期差异
适用场景
- 01升级仓库中的 pnpm
- 02更新 pnpm/action-setup 工作流固定版本
- 03升级前检查引导安装路径
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ openai/ openai-agents-js --skill pnpm-upgrade安装后在 Claude Code 中输入/pnpm-upgrade确认已加载。
附带文件agents/openai.yamlscripts/preflight.mjs
详细介绍
升级 pnpm
按照以下步骤更新 pnpm 和 CI 固定版本,避免盲目搜索和替换。
步骤(从仓库根目录运行)
-
确定目标 pnpm 版本
- 在更改本地工具链前查询 npm 注册表:
PNPM_VERSION=$(curl -fsSL https://registry.npmjs.org/pnpm/latest | jq -r .version)。 - 如果缺少版本号,则中止。
- 获取确切的包完整性值:
curl -fsSL "https://registry.npmjs.org/pnpm/${PNPM_VERSION}" | jq -r .dist.integrity。 - 将结果存储为
PNPM_INTEGRITY。 - 如果缺少完整性值,或其不以
sha512-开头,则中止。 - 将
sha512-后的 base64 摘要转换为小写十六进制,例如:printf '%s' "${PNPM_INTEGRITY#sha512-}" | base64 -d | xxd -p -c 256 - 将结果存储为
PNPM_SHA512_HEX。
- 在更改本地工具链前查询 npm 注册表:
-
查找目标 pnpm/action-setup 版本
- 查询 GitHub API:
curl -fsSL https://api.github.com/repos/pnpm/action-setup/releases/latest | jq -r .tag_name。 - 如果有
GITHUB_TOKEN/GH_TOKEN,请使用以提高速率限制。 - 存储为
ACTION_TAG(例如v4.2.0)。如果缺少,则中止。
- 查询 GitHub API:
-
将 action 标签解析为不可变的提交 SHA
- 运行
git ls-remote https://github.com/pnpm/action-setup "refs/tags/${ACTION_TAG}^{}",并将 SHA 保存为ACTION_SHA。 - 如果找不到解引用后的标签,则回退到运行
git ls-remote https://github.com/pnpm/action-setup "refs/tags/${ACTION_TAG}"。 - 如果
ACTION_SHA为空,则中止。
- 运行
-
预检发布版本和 CI 安装路径
- 运行
node .agents/skills/pnpm-upgrade/scripts/preflight.mjs --version "${PNPM_VERSION}" --action-ref "${ACTION_SHA}"。 - 脚本首先会拒绝
dependencies或devDependencies非空的已发布 pnpm 清单。pnpm 会捆绑其运行时依赖,因此这些字段表明发布有问题,例如[email protected]。 - 随后,脚本会在两个独立的临时目录中复现
pnpm/action-setup的两种安装路径:从pnpm-lock.json安装常规pnpm引导程序,从exe-lock.json安装独立的@pnpm/exe引导程序,设置隔离的PNPM_HOME目录,并将每个引导程序自更新至PNPM_VERSION。 - 如有任何失败,则中止升级。不要通过直接本地安装绕过此检查;预检旨在验证仅用于 CI 的引导路径。
- 运行
-
在本地更新 pnpm
- 运行
pnpm self-update "${PNPM_VERSION}"。 - 如果 pnpm 缺失,或自更新失败的唯一原因是当前安装无法自行更新,则运行
corepack prepare "pnpm@${PNPM_VERSION}" --activate。不要使用此回退方式绕过失败的预检。 - 确认
pnpm -v与PNPM_VERSION完全一致。
- 运行
-
对齐 package.json
- 打开
package.json,将packageManager设置为pnpm@${PNPM_VERSION}+sha512.${PNPM_SHA512_HEX}(保留末尾换行和格式)。
- 打开
-
谨慎更新工作流(不要使用宽泛的正则表达式)
- 文件:
.github/workflows/下所有使用pnpm/action-setup的文件。 - 对每个文件手动编辑:
- 设置
uses: pnpm/action-setup@${ACTION_SHA}。 - 如果存在
with: version:字段,则将其设置为${PNPM_VERSION}(保留引号样式和缩进)。
- 设置
- 不要改动无关步骤。避免使用多行 sed/perl 单行命令。
- 文件:
-
验证
- 运行
pnpm -v,确认其与packageManager中的版本部分一致。 - 确认
packageManager保留了准确的+sha512.${PNPM_SHA512_HEX}后缀。 - 运行
git diff,确保只包含预期的工作流和 package.json 更改。
- 运行
-
后续处理
- 如果更改了运行时代码/构建/测试配置(此处通常不会),则运行
$code-change-verification;否则进行轻量检查即可。 - 使用
chore: upgrade pnpm toolchain提交,并创建 PR(自动化流程可能会处理)。
- 如果更改了运行时代码/构建/测试配置(此处通常不会),则运行
注意事项
- 所需工具:
curl、jq、base64、xxd、node、npm和pnpm/corepack。如果缺少,请安装。 - 尽量少做修改,保持内容易读——优先直接编辑文件,而非全局替换。
- GitHub Actions 必须固定到提交 SHA,而不是标签。仅使用最新发布标签来查找要固定的提交 SHA。
- 如果 GitHub API 遭遇速率限制,请使用令牌重试,否则就放弃,不要猜测标签。
评论
支持 Markdown