SuperAPI AI 工具集

rhdh-yarn-bump

部署与运维

查看项目

更新于 10-16 03:28

技能介绍

RHDH 多仓库 Yarn 升级技能。

用途

将 Yarn Berry 4.x 的版本升级传播到以下仓库:

  • redhat-developer/rhdh-plugins:根工作区(若硬编码还包括 Fullsend)
  • redhat-developer/rhdh:根 + 嵌套工作区 + Containerfile
  • redhat-developer/rhdh-plugin-export-overlays:多处 packageManager 锁定
  • redhat-developer/rhdh-cli:根 packageManager / yarnPath
  • gitlab.cee.redhat.com/rhidp/rhdh:distgit 二进制 + 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 中的版本;denylist 锁定保持不变)。yarn set version $yarn_version 保留为变量。

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

默认路径:yarn-bump.sh

SKILL=<此技能所在目录> "$SKILL/scripts/yarn-bump.sh" # 解析最新 Yarn 4.x,克隆、升级、创建 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 及 denylist 锁定(4.8.1 / 4.9.2 / 4.15.0),用 --bin 升级每个树(使发行二进制出现在 diff 中),以 rhdh-bot 身份提交,并通过同级 /rhdh-pr-mr 打开 PR/MR(机器人升级无需 Jira key)。

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

手动 mutator(适用于已有检出)

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。Lock 刷新可能超过 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、yarn-<to>.cjs 权限 100755)、额外项已重写、lock 已刷新(除非 --no-refresh-locks)、且 PR/MR 已打开(或因存在机器人 PR / 无差异而跳过)时即为完成。