关于 upgrade-browser
面向 Flutter 开发的技能,用于升级 Web Engine 和框架测试中的 Chrome 或 Firefox 版本,并指导版本验证、CI 同步、本地测试及可选的 CIPD 上传。
主要功能
- 01查找并验证浏览器版本
- 02更新 Web Engine 和 CI 版本
- 03重新生成 CI 构建器配置
- 04运行本地 Web Engine 测试
- 05指导 CIPD 上传
适用场景
- 01更新 Flutter Web 测试中的 Chrome
- 02升级 Web Engine 中的 Firefox
- 03在上传浏览器包前验证更改
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ flutter/ flutter --skill upgrade-browser安装后在 Claude Code 中输入/upgrade-browser确认已加载。
附带文件scripts/fetch_versions.dart
详细介绍
升级浏览器
此技能可自动升级 Flutter Web Engine 和 Framework 测试中的 Chrome 和 Firefox 版本。
工作流
1. 查找并验证新版本
更新任何文件之前,请先查找并验证你要使用的版本是否存在。
- 查找最新稳定版本:
dart scripts/fetch_versions.dart latest <chrome|firefox> - 验证指定版本是否存在:
此命令会返回dart scripts/fetch_versions.dart verify <chrome|firefox> <version>true或false。
验证规则:
- 默认强制执行: 如果命令返回
false,请勿继续。 - 用户要求时可选: 如果用户明确要求跳过验证(例如,“不验证,直接升级到版本 X”),可以跳过此步骤。
- 验证失败: 如果验证失败,但用户确认仍要继续,则可以继续。
2. 更新本地文件
用户可能会要求升级其中一个或两个位置,也可能要求为每个位置使用不同版本。
Flutter Web Engine(engine/src/flutter/lib/web_ui/dev/package_lock.yaml)
更新 chrome 或 firefox 的 version 字段。
chrome:
version: 'NEW_VERSION'
firefox:
version: 'NEW_VERSION'
Framework 测试(.ci.yaml)
将 chrome_and_driver 的所有匹配项更新为新版本。
- {"dependency": "chrome_and_driver", "version": "version:NEW_VERSION"}
使用 replace 并设置 allow_multiple: true,确保更新所有实例。注意:目前 .ci.yaml 中只有 Chrome 以这种方式管理。
3. 同步 CI 配置
更新浏览器版本后,同步 CI 配置。此步骤会更新 engine/src/flutter/ci/builders/linux_web_engine_test.json。
只运行一次。 若要确认是否需要运行,请检查该文件的修改时间:
ls -l engine/src/flutter/ci/builders/linux_web_engine_test.json
在 engine/src/flutter/lib/web_ui 目录下运行:
dev/felt generate-builder-json
验证: 确认命令执行完毕后,文件 engine/src/flutter/ci/builders/linux_web_engine_test.json 的时间戳已更新。
4. 本地验证
上传到 CIPD 之前,请在本地运行测试,确保没有回归问题。在 engine/src/flutter/lib/web_ui 目录下运行:
dev/felt test
注意:可以使用 --browser <chrome|firefox> 限定范围。
5. 上传到 CIPD(Package Roller)
这是最后一步,会将二进制文件上传到 CIPD,并且需要特殊的临时权限。
- 询问用户是否拥有所需的 CIPD 权限(如不确定,请在 Discord 上联系 #hackers-infra)。
- 如果用户确认,在
engine/src/flutter/lib/web_ui目录下运行:
注意:如果用户想先测试,请使用dart dev/package_roller.dart--dry-run。
示例
-
用户:“将所有位置的 Chrome 和 Firefox 升级到最新稳定版本。”
-
Agent:
- 运行
dart scripts/fetch_versions.dart latest获取最新版本。 - 更新
engine/src/flutter/lib/web_ui/dev/package_lock.yaml和.ci.yaml。 - 运行
dev/felt generate-builder-json同步 CI 配置。 - 建议运行本地测试。
- 最后询问是否拥有 CIPD 权限。
- 运行
-
用户:“将所有位置的 Chrome 升级到版本 135.0.0.0。跳过验证。”
-
Agent:
- 按照用户的要求,跳过
dart scripts/fetch_versions.dart verify。 - 直接使用
135.0.0.0更新package_lock.yaml和.ci.yaml。 - 按照工作流的其余步骤操作(同步、测试、CIPD)。
- 按照用户的要求,跳过
-
用户:“将 Web Engine 中的 Firefox 更新到 130.0。”
-
Agent:
- 使用
dart scripts/fetch_versions.dart verify firefox 130.0验证 Firefox 的版本130.0。 - 如果验证失败,告知用户:“我无法通过 Mozilla 的官方发布历史验证 Firefox 版本 130.0。你确定这是正确的版本号吗?”
- 如果用户确认或验证成功,则更新
package_lock.yaml。 - 按照工作流的其余步骤操作(同步、测试、CIPD)。
- 使用