Files
ArtPlayer/refactor/changes/2026-09-15-CI-01-browser-matrix.md
T

5.1 KiB
Raw Blame History

CI-01 按浏览器引擎拆分播放作业

原因与实现

上一个检查点仅弹幕/Mask 安装子集就运行了 22.5 分钟。原 browser-smoke 每个 系统串行执行 Node 消费者、React/Vue、三个引擎的 source/installed、iframe history 和性能检查。没有完整远端超时证据,但这批实测足以支持减少单个作业 的串行工作量;不能承诺此次拆分后每个远端组合一定在 60 分钟内完成。

  • browser-smoke 使用三个 OS × 三个引擎,共 9 个组合,最多同时运行 6 个。 每个组合独立冻结安装、正常打包完整 browser 包清单,再执行所选引擎的 source 和 installed 两个范围。唯一新增参数是 --project=${{ matrix.browser }}。
  • browser-consumers 每个 OS 一次,共 3 个组合,最多同时运行 3 个。保留同一 core/chapter tarball 的 Node 20.19.0、22.12.0、标准 24.21.0 消费,以及原有 React/Vue、iframe history 和性能三引擎检查。恢复 Node 的次序保持不变。
  • 两组互不依赖;source/installed 保留 !cancelled(),普通失败不会阻止另一 范围采证,失败仍传入最终结果。每个作业有独立 runner,报告目录不混用。
  • 稳定的 CI result 同时依赖 checks、coverage、browser-smoke、browser-consumers。 任一组失败、取消、跳过、缺失都不能通过。artifact 名增加引擎维度;消费者 使用独立前缀。既有固定 action SHA、只读权限、精确缓存键和失败上传保留。
  • 影响策略将每个必需调用绑定到其实际 job、参数和条件。同名 test:package 在两个作业有不同用途,不能再只以命令名去重。原先残留的 test:browser 门槛改为两个真实的 scope 入口;没有通过删除门槛绕过校验。

代价是更多独立 runner 和重复打包。当前没有新增依赖、版本变化或生产 API 变更;没有修改用例断言、重试、超时、既有能力跳过或 installed 包清单。 远端队列、总计费分钟和实际加速幅度仍待测量。

验证

环境为 Windows、Node 24.21.0、Yarn 1.22.22;真实浏览器为 Chromium 153.0.8010.12、Firefox 155.0、WebKit 26.6。证据及输入指纹见 机器记录。

验证 结果及边界
source 完整 collection 154 文件、4,641 项;三个独立引擎各 1,547 项,按测试 ID 精确比较,并集完全相同且不重叠
installed 完整 collection 67 文件、1,980 项;三个独立引擎各 660 项,同样精确比较,无遗漏/重复
source 定向实际运行 Chromium 25、Firefox 25、WebKit 19 通过;WebKit 6 项 ASR 能力跳过
installed 定向实际运行 Chromium 10、Firefox 10、WebKit 4 通过;WebKit 6 项 ASR 能力跳过
CI 工程测试 最终 77/77 通过,5,997.7666 ms;覆盖矩阵/引擎删减、artifact 冲突、跨组依赖、遗漏消费者、结果失败/取消/跳过/缺失和影响策略
静态检查 actionlint 1.7.12、改动 JS/MJS 只读 ESLint、check:ci、check:impact --report、严格工具链通过

八次 collection 只列出用例,report 的 skipped 不代表实际能力跳过或播放通过。 六次真实运行分别使用 scope 入口加 --project=<engine> playback.spec.js;这个 文件正则匹配 source 的 asr-playback、auto-playback、playback 三文件,以及 installed 的 asr-playback、playback 两文件。它们合计 93 通过、12 能力跳过, 零失败、零重试;这不是全量 6,621 项重跑。WebKit 跳过原因是 Windows 下缺少 原生 AudioContext/AudioWorkletNode,不能记录为 ASR 播放成功。

核心旧/新播放器实际解码画面、播放/暂停、seek、切源和销毁仍由既有用例断言。 源码入口清除继承的安装 map;安装入口校验上轮 run-ifGhEv 十八包的构建新鲜度 和安装字节,真实服务的核心摘要与该 map 一致。本次没有重建生产包,因为改变的 是 CI 编排和校验脚本;安装检查拒绝陈旧输入的机制保持执行。

本地报告归档在 refactor/.cache/ci01-browser-matrix-<scope>-<engine>-collection 和 ...-playback。相邻同前缀日志保留实际退出码对应输出。首轮 CI 测试因为旧 影响策略仍要求原作业调用而失败;第二轮暴露同名脚本去重问题,两次日志保留, 修正后全组 77 项通过。没有把最初失败覆盖为通过。

复核 collection 时分别运行两个 scope 的 --list,再分别加三个 --project; 比较 report 中每个 spec ID 与 projectName 的组合。再次运行前先归档本地同一 scope 的旧报告。完整 CI 使用上述不带文件过滤的工作流命令。

尚未完成

CI-01 保持 doing,任务总数 263、已完成 197 不变。远端 Linux/macOS/Windows 全量运行、实际缓存/取消/报告上传/60 分钟预算、分支保护、其余生态分发与设备 门槛尚未验收。既有 Chapter/Audio/DASH/JASSUB 失败未因本轮关闭。

没有推送、触发远端流程、部署或发布。当前改动随独立 CI-01 检查点本地提交; 提交后按 check:commits --report 审计。