SuperAPI AI 工具集

pulumi-upgrade-provider

部署与运维

查看项目

更新于 10-15 15:25

技能介绍

Pulumi Upgrade Provider 是一个面向 Pulumi 提供商仓库升级场景的 Agent Skill,用于把 provider 仓库升级到新的上游版本。

用途 该技能用于自动化升级 Pulumi 提供商仓库。典型任务是把某个 pulumi provider 仓库升级到新的上游版本,并通过反复运行和修复来推动升级成功。

主要能力

  • 运行 upgrade-provider 工具进行本地升级:upgrade-provider $ORG/$REPO --repo-path . --no-submit,并在每次重试时保留 --no-submit。
  • 记录升级前基线:用 git status --short --untracked-files=all | tee "$baseline_file" 记录已有改动,作为升级前基线。已有改动不会阻断升级,但工具会大范围暂存,可能把它们包含进生成的提交中。
  • 日志与错误处理:将输出写入仓库外的日志文件,扫描以 error: 开头的行。若成功退出,先检查是否出现 No actions needed,若是则报告 provider 已是最新,或请求的目标并非升级,然后成功停止。
  • 读取本地完成报告:用 awk '/^Upgrade completed locally;/{found=1} found' "$log_file" 提取完整报告,其中包含建议的 PR 正文与元数据、审查命令以及所有被跳过的提交动作。
  • 错误修复参考:遇到失败时使用该技能自带的 references/upgrade-provider-errors.md(技能文件夹内,而非仓库内)进行修复,然后以 --no-submit 重跑。
  • 补丁工作流:若修复需要创建、修订、删除或变基补丁,使用 upstream-patches 技能;被中断的补丁工作流必须先 check in 再重跑。
  • 处理上游 go get 失败:涉及被忽略的 replace 指令或 unknown revision v0.0.0 时,在应用文档中的 provider/go.mod 替换后,用 --target-version 重跑,并保留原本的 major/non-major 意图,仅在真正的主版本升级时添加 --major。
  • 审阅本地升级:以工具最终报告为唯一事实来源,获取基础分支、工作分支、建议的 PR 标题/正文/元数据以及被跳过的提交动作。先做有界摘要审查(默认分支、git status、git log、git diff --shortstat、按目录统计的改动文件数),避免默认打印完整分支 diff。
  • 生成文档占位符审计:在发布前必须检查 provider/replacements.json 中是否存在未解决的占位符(TODO),若有则视为提交前阻断项;可用 cd provider && go test -v -run TestReplacementDoesNotIncludeTodos . 做聚焦验证。
  • 补丁审查流程:如升级改动了补丁,先 ./scripts/upstream.sh checkout,用 git -C upstream log --oneline pulumi/checkout-base..pulumi/patch-checkout 查看提交,审查后用 ./scripts/upstream.sh check_in 退出(审查后必须 check_in,否则会阻塞下一次安全运行)。
  • 提交已审阅的升级:复现报告中所有适用动作,而不仅是创建 PR;保留建议的标题、正文、release label、审查者和指派者。资料特别强调:绝不自行决定、推断或更改 release label,必须使用 upgrade-provider 发出的 label;仅在目标跨过当前上游主版本时才添加 --major。
  • 推送使用更安全的 lease 保护形式:git push --set-upstream origin "$branch" --force-with-lease,除非用户明确批准覆盖更新的远端工作。
  • 用 gh 创建或更新 PR,并在需要时把列出的升级 issue 指派给 PR 指派者;对于 bridge 升级,关闭被取代的 bridge PR 并评论替换 PR 的 URL。
  • 获取并报告最终 PR URL:gh pr view --json url --jq .url || gh pr list --head "$(git branch --show-current)" --json url --jq '.[0].url'。
  • 若提交前未加入 fixes 段,可用 gh api -X PATCH 追加而不是替换正文(避免使用 gh pr edit 以规避 GraphQL project-card 错误)。

使用方式 从仓库根目录运行;等待完成(可能长达 10 分钟)。整个运行循环中不得手动提交、推送或创建分支;--no-submit 成功之后,允许做聚焦的修正提交并手动提交。

适用场景

  • 将 Pulumi provider 仓库升级到新上游版本。
  • 处理升级过程中的中断补丁状态、补丁冲突、SDKv2 到 Plugin Framework 迁移、被忽略的上游替换、vendored 上游依赖、.NET 重复文件、新模块映射等错误。

限制与停止条件 在以下情况应停止迭代并报告失败:命令未找到(退出码 127);同一错误连续尝试修复 3 次仍未成功;错误模式未知且无法在参考文档中覆盖、无法确定安全修复;补丁状态不明确、无法证明每个补丁都已应用且目标变基已完成;需要人工判断(如多种有效实现方案之间选择、模块组织的架构决策)。上游破坏性变更、弃用或框架迁移本身不构成停止理由,只有当实施升级存在未解决的选择时才停止。停止时需报告:遇到的错误、尝试过的修复(含文件路径与改动)、为何需要人工介入、以及任何部分进展。

其他注意事项

  • 不要使用 ./scripts/upstream.sh init -f,除非有意丢弃被中断的补丁工作,它是破坏性的。
  • 提交前不要让 upstream 停留在 checkout 或存在活动的 Git 操作状态。
  • 不要 stash 改动,改用干净的工作树或移除无关产物。
  • 旧版 git 不支持 git rebase --continue --no-edit,应使用 git rebase --continue 并接受现有提交信息;可用 GIT_EDITOR=true(或 GIT_EDITOR=:)避免编辑器提示。

资料未提供该技能的收费、价格、平台或效果信息。