SuperAPI AI 工具集

self-update

部署与运维

查看项目

更新于 10-21 12:54

技能介绍

用途

self-update 是一个用于将 junior-prod 应用更新到最新已发布 Junior 版本的技能。当被要求自更新 Junior、升级 @sentry/junior 和 @sentry/junior-* 等包时使用。

主要能力

该技能以工作流形式组织,覆盖以下环节:

  1. 预检:检查 git 状态与当前分支,若 package.json、pnpm-lock.yaml 或 pnpm-workspace.yaml 存在无关的未提交更改则停止。
  2. 清点与目标解析:从 package.json 清点 @sentry/junior 和 @sentry/junior-* 直接依赖,记录包名、当前精确版本和依赖分区;保持所有 Junior 依赖在同一版本,不跨分区移动包。通过 pnpm view 解析目标版本,若用户指定版本则使用该版本,若已在最新版则停止。在修改文件前验证每个清点包的目标版本存在。
  3. 构建发布上下文:从 GitHub release notes 汇总旧版本到目标版本之间的变更,不读取 CHANGELOG.md 或抓取 PR。标签与包版本一致且无 v 前缀。收集对应 release body,若缺少预期 GitHub release 则停止。记录目标 release 的 publishedAt、总变更数、破坏性变更和配置相关项。
  4. 创建或复用分支:使用 build/update-junior-<target> 分支,所有文件修改在该分支进行。
  5. 同步 minimumReleaseAgeExclude:若 pnpm-workspace.yaml 存在该列表,确保每个 Junior 包被精确条目或已有包模式覆盖。
  6. 更新依赖(保持分区):按依赖分区分组执行 pnpm add,不手动编辑 package.json 中的版本,不使用本地 ../junior 链接脚本。
  7. 同步本地配置:若新增独立 @sentry/junior-* 插件包,将其加入 plugins.ts 的 defineJuniorPlugins(...) 集合并保持 juniorNitro({ plugins: "./plugins" }) 指向该模块;排除基础/运行时工具包。运行 node scripts/check-plugin-packages.mjs,并与 apps/example 在 target_ref 处比较消费者配置以发现形态漂移。
  8. 验证:执行 git diff --name-only、pnpm install --frozen-lockfile、pnpm check、pnpm typecheck、pnpm build。预期变更文件包括 package.json、pnpm-lock.yaml,以及可选的 pnpm-workspace.yaml、nitro.config.ts、vercel.json。
  9. 提交:使用 build(deps): Update Junior packages to <target> 提交信息。
  10. 推送并创建/更新草稿 PR:包含版本变更、带 GitHub release 链接的发布摘要、配置比较发现、可选的工作区/插件/vercel 变更和意外差异。

使用方式

该技能通过工作流步骤执行,涉及命令包括 git status、git branch、pnpm view、pnpm add、pnpm install、pnpm check、pnpm typecheck、pnpm build、gh release view、git diff 等。自动更新场景下,可通过 github_getRelease 解析 getsentry/junior 并在 release.published 上创建持久事件自动化,任务指令应加载本技能并针对事件中发布的标签运行更新。

适用场景

适用于需要将 junior-prod 应用升级到最新 Junior 发布版本的场景,包括手动发起的更新和基于 GitHub release 的持续自动更新。

限制

技能定义了明确的停止条件:目标版本或 tarball 在有限可用性检查后仍缺失;区间内任一 npm 版本缺少匹配的 GitHub release;修复后 pnpm install --frozen-lockfile 仍失败;检查因非既有、非环境原因失败且无安全配置修复;package.json 变更但 pnpm-lock.yaml 未变更;示例应用比较揭示破坏性插件签名变更且所需值无法从现有消费者配置推断。缺失包本身不能证明发布失败或扫描延迟,不得重新发布或另切版本。