mcpField
U
upgrade-browser

upgrade-browser

github.com/flutter开发180.5k99 次安装今天更新
代码仓库

关于 upgrade-browser

面向 Flutter 开发的技能,用于升级 Web Engine 和框架测试中的 Chrome 或 Firefox 版本,并指导版本验证、CI 同步、本地测试及可选的 CIPD 上传。

主要功能

  1. 01查找并验证浏览器版本
  2. 02更新 Web Engine 和 CI 版本
  3. 03重新生成 CI 构建器配置
  4. 04运行本地 Web Engine 测试
  5. 05指导 CIPD 上传

适用场景

  1. 01更新 Flutter Web 测试中的 Chrome
  2. 02升级 Web Engine 中的 Firefox
  3. 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,并且需要特殊的临时权限。

  1. 询问用户是否拥有所需的 CIPD 权限(如不确定,请在 Discord 上联系 #hackers-infra)。
  2. 如果用户确认,在 engine/src/flutter/lib/web_ui 目录下运行:
    dart dev/package_roller.dart
    
    注意:如果用户想先测试,请使用 --dry-run。

示例

  • 用户:“将所有位置的 Chrome 和 Firefox 升级到最新稳定版本。”

  • Agent:

    1. 运行 dart scripts/fetch_versions.dart latest 获取最新版本。
    2. 更新 engine/src/flutter/lib/web_ui/dev/package_lock.yaml 和 .ci.yaml。
    3. 运行 dev/felt generate-builder-json 同步 CI 配置。
    4. 建议运行本地测试。
    5. 最后询问是否拥有 CIPD 权限。
  • 用户:“将所有位置的 Chrome 升级到版本 135.0.0.0。跳过验证。”

  • Agent:

    1. 按照用户的要求,跳过 dart scripts/fetch_versions.dart verify。
    2. 直接使用 135.0.0.0 更新 package_lock.yaml 和 .ci.yaml。
    3. 按照工作流的其余步骤操作(同步、测试、CIPD)。
  • 用户:“将 Web Engine 中的 Firefox 更新到 130.0。”

  • Agent:

    1. 使用 dart scripts/fetch_versions.dart verify firefox 130.0 验证 Firefox 的版本 130.0。
    2. 如果验证失败,告知用户:“我无法通过 Mozilla 的官方发布历史验证 Firefox 版本 130.0。你确定这是正确的版本号吗?”
    3. 如果用户确认或验证成功,则更新 package_lock.yaml。
    4. 按照工作流的其余步骤操作(同步、测试、CIPD)。

评论

支持 Markdown