mcpField
R
rhdh-yarn-bump

rhdh-yarn-bump

github.com/redhat-developer开发1947 次安装1 天前更新
代码仓库

关于 rhdh-yarn-bump

用于在多个 RHDH 相关仓库中统一升级 Yarn Berry 4.x 版本的维护技能。它会处理容器文件中的版本固定和共享发布二进制文件,并可创建 PR 或 MR。

主要功能

  1. 01跨六个仓库升级 Yarn
  2. 02更新 packageManager 和 yarnPath
  3. 03改写容器及环境变量中的版本
  4. 04刷新锁文件并格式化变更
  5. 05创建 PR 和 MR

适用场景

  1. 01统一 RHDH 仓库的 Yarn 版本
  2. 02对指定 Yarn 版本执行试运行
  3. 03更新已有的仓库检出
  4. 04在每周维护中同步 Yarn 版本

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/redhat-developer/rhdh-skills --skill rhdh-yarn-bump

安装后在 Claude Code 中输入/rhdh-yarn-bump确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

agents/
openai.yaml
scripts/
bump-yarn.js
yarn-bump.sh
tests/
bump-yarn.test.mjs

详细介绍

RHDH 多仓库 Yarn 升级

目标

在以下仓库中统一升级到 Yarn Berry 4.x:

仓库备注
redhat-developer/rhdh-plugins根工作区(如果 Fullsend 中有硬编码,也包括 Fullsend)
redhat-developer/rhdh根工作区 + 嵌套工作区 + Containerfile
redhat-developer/rhdh-plugin-export-overlays多处 packageManager 固定版本
redhat-developer/rhdh-cli根目录 packageManager / yarnPath
gitlab.cee.redhat.com/rhidp/rhdhdistgit 二进制文件 + ENV YARN=(获取的 CLI 与 GitHub 上的字节完全相同)
gitlab.cee.redhat.com/rhidp/rhdh-plugin-catalog各工作区固定版本 + Containerfile

Renovate 的 Yarn packageManager 更新已禁用(RHIDP-17563)。本技能是升级流程。

分支: GitHub 和 GitLab CEE 上的当前分支均为 main。

实际变更内容

yarn set version <to>                 # packageManager + yarnPath + .yarn/releases
chmod +x .yarn/releases/yarn-<to>.cjs
yarn install --mode=update-lockfile

当 package.json 定义了 prettier:check 或 prettier:fix 时,yarn-bump.sh 会在提交前对变更文件运行 yarn prettier --ignore-unknown --write。Yarn 会在 .yarnrc.yml 中写入 "**";而 Prettier(rhdh-cli)要求使用 '**'。

此外还有 Yarn 无法检测到的固定版本:ENV YARN=、Containerfile / Dockerfile 中的 yarn_version=,以及字面值形式的 yarn set version(包括未列入 --from 的版本;拒绝列表中的固定版本会保留)。yarn set version $yarn_version 会保留为变量形式。

yarn-bump.sh 会对 https://repo.yarnpkg.com/<to>/packages/yarnpkg-cli/bin/yarn.js 运行一次 curl -fsSL(与 yarn set version 使用的 URL 相同),并将该文件安装到每个已升级的 .yarn/releases 目录。GitHub PR 和 GitLab MR 会提交 yarn-<to>.cjs(模式为 100755),以及已移除的旧版二进制文件。如果下载失败,GitLab 会回退为复制由 GitHub 升级生成的二进制文件。

默认流程:yarn-bump.sh

SKILL=<this skill's directory>
"$SKILL/scripts/yarn-bump.sh"                 # resolve latest Yarn 4.x, clone, bump, PR/MR
"$SKILL/scripts/yarn-bump.sh" --to 4.18.1 --dry-run

该脚本会解析 Yarn 4.x(@yarnpkg/cli;除非指定 --to,否则绝不使用 stable / 5.x),下载一次该 CLI,克隆六个仓库,跳过未关闭的 chore/automated-yarn-bump* PR/MR 和拒绝列表中的固定版本(4.8.1 / 4.9.2 / 4.15.0),使用 --bin 升级每棵工作树(因此发布二进制文件会包含在差异中),以 rhdh-bot 身份提交,并通过同级目录中的 /rhdh-pr-mr 创建 PR/MR(机器人升级无需 Jira key)。

GitLab 每周维护流程会克隆此技能包,并在 digest/bootc 之后、Quay 清理之前运行 yarn-bump.sh。

手动修改器(已有检出目录)

node "$SKILL/scripts/bump-yarn.js" --scan --root /path/to/repo
node "$SKILL/scripts/bump-yarn.js" --to 4.18.1 --from-all --root /path/to/rhdh-plugins
curl -fsSL -o /tmp/yarn-4.18.1.cjs \
  https://repo.yarnpkg.com/4.18.1/packages/yarnpkg-cli/bin/yarn.js
node "$SKILL/scripts/bump-yarn.js" --to 4.18.1 --bin /tmp/yarn-4.18.1.cjs \
  --from-all --root /path/to/rhdh-downstream

如果省略 --from-all,--from 4.12.0,4.14.1 是默认值。锁文件刷新可能超过 45 分钟。

反模式

  • 不要重新启用 Renovate 的 Yarn 升级;它会遗漏 Containerfile / ENV YARN=。
  • 不要运行 yarn set version stable——所有仓库必须统一使用完全相同的 4.x 版本。
  • 不要为每个仓库单独下载 Yarn 二进制文件。从 repo.yarnpkg.com 下载一次,然后由 --bin 将这些字节复制到每个 PR/MR 中。只有下载失败时,才使用 --copy-bin 作为回退方式。
  • 不要对 rhdh-1-rhel-9 特别处理;两个 CEE 仓库默认使用 main。

测试

node --test "$SKILL/tests/bump-yarn.test.mjs"
bash -n "$SKILL/scripts/yarn-bump.sh"

完成条件

匹配的工作区均已使用 --to 指定的版本(packageManager、yarnPath、模式为 100755 的 yarn-<to>.cjs),额外项已重写,锁文件已刷新(除非指定 --no-refresh-locks),且 PR/MR 已创建(或因机器人 PR 尚未关闭 / 无差异而跳过)。

评论

支持 Markdown