SuperAPI AI 工具集

update-chrome-binaries-test-region

部署与运维

查看项目

更新于 10-15 12:58

技能介绍

用途

该技能用于将 Remotion Lambda 的 Chrome 二进制文件发布到 eu-central-1 测试区域,并更新托管层与 Chrome 版本引用。适用于更新 Chrome 版本、发布 Lambda 层、验证 Docker 渲染矩阵等场景。

主要能力

  • 在指定 AWS 账号下发布 5 个 Lambda 层:fonts、chromium、emoji-apple、emoji-google、cjk。
  • 更新 packages/lambda/src/shared/hosted-layers.ts 中的托管层引用。
  • 更新多处 Chrome 版本引用,包括下载 URL、层构建脚本、文档版本表与示例代码。
  • 通过 Docker 矩阵测试验证新 Chrome 二进制。

使用方式

AWS 设置

  1. 运行 aws sts get-caller-identity 确认 AWS CLI 已登录到账号 678892195805。若未登录,请用户先登录。
  2. 运行 eval "$(aws configure export-credentials --format env)" 将 AWS 凭证导出到 shell。Lambda 客户端检查 AWS_ACCESS_KEY_ID,不会自行读取 SSO 或 Identity Center 凭证。
  3. 在 packages/lambda 目录下运行 bun src/admin/make-layer-public.ts --region=eu-central-1 发布全部 5 个层。
  4. eval 与 bun 命令必须在同一次 shell 调用中执行,因为环境变量不会跨 shell 调用保留。
  5. 验证输出为 5 个层分别打印 LayerArn 和 Version,并最终输出包含已发布区域的 JSON dump。

更新托管层

将脚本 stdout 中的 JSON dump 复制到 packages/lambda/src/shared/hosted-layers.ts。不要手动递增版本号。脚本会在若干空行后打印完整的 HostedLayers 对象,显示 AWS 返回的每个层的 layerArn 和 version。用这些值替换 hosted-layers.ts 中对应区域的条目。测试阶段(--region=eu-central-1)仅更新 eu-central-1,其他区域在推广前保持旧版本。若脚本以 --skip=<region> 调用,则跳过区域保持不变。

更新 Chrome 引用

使用用户提供的 Chrome 版本,例如 157.0.8080.0。默认下载不再使用 Playwright revision。在 Google Chrome for Testing 下载元数据中验证所有支持平台均有相同 Chrome 版本。若无精确匹配,选择最接近的可用版本并保持其版本/缓存标记准确。Linux ARM64 上显式数字 Playwright revision 覆盖仍受支持。

需要更新的文件:

  • packages/renderer/src/browser/get-chrome-download-url.ts:TESTED_VERSION。Remotion 与 Google CDN URL 使用此版本,包括 Amazon Linux 构建与 Linux ARM64 回退。验证全部 5 个 Remotion 归档以及 Linux x64/ARM64、macOS x64/ARM64、Windows x64 的两种 Google 浏览器模式。更换提供方时,对照归档布局检查 BrowserFetcher.ts 的可执行路径。
  • 更改 URL 前,用 curl -sI 针对新的硬编码 URL 以及跟随 TESTED_VERSION 的模板化 chromium-headless-shell-linux-{arm64,x64}-<version>.zip?clearcache URL 验证新二进制存在。仅当全部返回 HTTP 200 时继续;否则请用户将缺失构建上传到 remotion.media。
  • packages/lambda/src/admin/make-layer-public.ts:Chromium <version>(从源码编译),以及传递给 PublishLayerVersionCommand 的 license 字符串。
  • packages/docs/docs/lambda/runtime.mdx:在 "Chrome" 版本表前插入新行,对应下一个 Remotion 发布版本。从 packages/core/package.json 确定下一个版本并递增 patch。
  • packages/docs/docs/miscellaneous/chrome-headless-shell.mdx:在版本表前插入新行,并更新 "Version tracking" 部分的示例版本字符串。
  • packages/docs/docs/renderer/ensure-browser.mdx:更新示例代码块中两处 version: '<old>'。

Docker 验证

在 packages/dockerfiles/ 下用 ./run.sh 针对新 Chrome 二进制运行 Docker 矩阵测试。先确保 Docker Desktop 正在运行。

测试渲染内容:

  • browser-test:Three.js、WebGL 与编解码器冒烟测试。
  • html-in-canvas:实验性 WICG drawElementImage() 与 canvas.requestPaint() API。

输出位于 packages/dockerfiles/out/<platform>.mp4 与 packages/dockerfiles/out/<platform>-html-in-canvas.mp4。

Dockerfile 安装的是 @remotion/cli 的本地工作区构建及传递依赖,而非已发布版本。@remotion/renderer 的源码更改会在发布前被采用。run.sh 运行 pack-cli.ts,后者遍历 @remotion/cli 的 workspace:* 传递依赖,对每个运行 bun pm pack 输出到 packages/dockerfiles/tarballs/,并生成 local-cli-package.json,将每个 tarball 作为直接依赖与 override。

若向 Docker 测试矩阵添加新 composition,需在 packages/example/src/BrowserTestRoot.tsx 中注册,并在 run.sh 中添加对应的 RUN remotion render /usr/app/bundle <id> /usr/app/<filename>.mp4 行及 docker cp 提取。

packages/core/src/HtmlInCanvas.tsx 中的 <HtmlInCanvas> 运行时检查需要 ctx.drawElementImage、canvas.requestPaint、canvas.captureElementImage 与 transferControlToOffscreen,Chrome 149+ 在传入 --enable-features=CanvasDrawElement 时暴露这些。若 html-in-canvas 渲染失败并提示 "HTML in Canvas is not supported" 而 browser-test 通过,最可能的原因是 Chrome 版本不匹配。

适用场景

  • 更新 Remotion Lambda 使用的 Chrome 版本。
  • 向测试区域发布 Lambda 层并验证。
  • 在推广到所有区域前进行端到端验证。

限制

  • 测试区域验证通过前,不应推广到所有区域。
  • 环境变量不跨 shell 调用保留,eval 与 bun 命令需在同一次 shell 调用中执行。
  • 若新二进制 URL 未全部返回 HTTP 200,需用户上传缺失构建。
  • 其他区域在推广前保持旧版本。