upgrade-browser

作者: flutter

在Flutter Web引擎和/或框架测试中升级浏览器版本(Chrome或Firefox)。当被要求将Chrome或Firefox升级到更新版本时使用。

npx skills add https://github.com/flutter/flutter --skill upgrade-browser

Upgrade Browser

This skill automates the process of upgrading Chrome and Firefox versions in the Flutter Web Engine and the Framework tests.

Workflow

1. Identify and Verify the New Version

Before updating any files, find and verify the existence of the version you want to use.

  • To find the latest stable version:
    dart scripts/fetch_versions.dart latest <chrome|firefox>
    
  • To verify a specific version exists:
    dart scripts/fetch_versions.dart verify <chrome|firefox> <version>
    
    This command will return true or false.

Verification Rules:

  • Enforced by default: If the command returns false, do not proceed.
  • Optional if requested: If the user explicitly asks to skip verification (e.g., "Upgrade to version X without verification"), you may skip this step.
  • Failed verification: If verification fails but the user confirms they want to proceed anyway, you may continue.

2. Update Local Files

The user may request to upgrade one or both locations. They may also use different versions for each location.

Flutter Web Engine (engine/src/flutter/lib/web_ui/dev/package_lock.yaml)

Update the version field for chrome or firefox.

chrome:
  version: 'NEW_VERSION'

firefox:
  version: 'NEW_VERSION'

Framework Tests (.ci.yaml)

Update all occurrences of chrome_and_driver with the new version.

- {"dependency": "chrome_and_driver", "version": "version:NEW_VERSION"}

Use replace with allow_multiple: true to ensure all instances are updated. Note: Currently, only Chrome is managed this way in .ci.yaml.

3. CI Config Sync

After updating the browser versions, synchronize the CI configurations. This step updates engine/src/flutter/ci/builders/linux_web_engine_test.json.

Only run this once. To verify if it needs to run, check the modification time of the file:

ls -l engine/src/flutter/ci/builders/linux_web_engine_test.json

From engine/src/flutter/lib/web_ui, run:

dev/felt generate-builder-json

Validation: Confirm the file engine/src/flutter/ci/builders/linux_web_engine_test.json has a new timestamp after the command finishes.

4. Local Verification

Before uploading to CIPD, run tests locally to ensure no regressions. From engine/src/flutter/lib/web_ui, run:

dev/felt test

Note: You can use --browser <chrome|firefox> to limit the scope.

5. CIPD Upload (Package Roller)

This is the final step as it uploads binaries to CIPD and requires special, temporary permissions.

  1. Ask the user if they have the necessary CIPD permissions (contact #hackers-infra on Discord if unsure).
  2. If confirmed, from engine/src/flutter/lib/web_ui, run:
    dart dev/package_roller.dart
    
    Note: Use --dry-run if the user wants to test first.

Examples

  • User: "Upgrade Chrome and Firefox to the latest stable versions everywhere."

  • Agent:

    1. Runs dart scripts/fetch_versions.dart latest to get the latest versions.
    2. Updates engine/src/flutter/lib/web_ui/dev/package_lock.yaml and .ci.yaml.
    3. Runs dev/felt generate-builder-json to sync CI configs.
    4. Suggests running local tests.
    5. Finally, asks about CIPD permissions.
  • User: "Roll Chrome to version 135.0.0.0 everywhere. Skip verification."

  • Agent:

    1. Skips dart scripts/fetch_versions.dart verify because the user requested it.
    2. Updates package_lock.yaml and .ci.yaml directly with 135.0.0.0.
    3. Follows the rest of the workflow (Sync, Test, CIPD).
  • User: "Update Firefox in the web engine to 130.0."

  • Agent:

    1. Verifies version 130.0 for Firefox using dart scripts/fetch_versions.dart verify firefox 130.0.
    2. If verification fails, informs the user: "I was unable to verify Firefox version 130.0 through Mozilla's official release history. Are you sure this is the correct version number?"
    3. If user confirms or verification succeeds, updates package_lock.yaml.
    4. Follows the rest of the workflow (Sync, Test, CIPD).

来自 flutter 的更多技能

dart-modern-features
flutter
为了找到现代化的候选方案:
flutter-fix-layout-issues
flutter
使用Dart和Flutter MCP工具修复Flutter布局错误(溢出、无界约束)。适用于处理“RenderFlex溢出”、“垂直…
adding-release-notes
flutter
在 DevTools 发布说明中添加面向用户的变更描述。用于在 NEXT_RELEASE_NOTES.md 文件中记录改进、修复或新功能。
reviewing-devtools-prs
flutter
DevTools 仓库专属的PR审查工作流程,执行DevTools风格指南和常见审查模式。在审查……中的拉取请求时使用。
dart-use-primary-constructors
flutter
帮助用户在Dart中编写语法和语义正确的主构造函数,并迁移/使用新的构造函数语法、空体分号语法等。
code-documentation
flutter
编写有效代码文档的指南,包括docstrings、JSDoc、dartdoc和实现注释。在编写新代码、添加…时使用此技能。
api-review
flutter
对照规范的API设计指南审查指定代码。当用户要求进行API审查或根据API设计规范检查代码时,请使用此技能…
flutter-accessibility
flutter
在Flutter应用中实现WCAG 2和EN 301 549无障碍标准及自适应布局。在移动端、网页端和桌面端强制实施语义标注、点击目标尺寸(最小48x48 dp)和文本对比度(小文本4.5:1,大文本3:1)。提供网页语义初始化、交互式组件包裹、基于屏幕尺寸的布局切换以及键盘/鼠标输入处理的决策逻辑。包含通过FocusTraversalGroup实现的焦点遍历管理,以及...