mirror of
https://github.com/zhw2590582/ArtPlayer.git
synced 2026-10-24 06:31:20 -08:00
test(ci): [CI-01] centralize installed roster and cover ASR and Cast
This commit is contained in:
1 parent
b90de99bc2
commit
8379ac7bbf
30 files changed
+3028
-58
No files matched your search
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,57 @@
|
||||
# CI-01 统一包清单并接入 ASR、Chromecast 安装验证
|
||||
|
||||
## 工程与加载边界
|
||||
|
||||
新增 yarn test:package --browser,从 browser-validation/scope.ts 的 installedPackages
|
||||
生成额外包清单,与安装浏览器预检使用同一数据来源。默认 core/chapter 与显式
|
||||
--include 保留;未知/重复/空选项及 --browser 与 --include/--release 混用被拒绝。
|
||||
工作流、契约负例和维护文档同步,不能在 CI 偷换为手写部分包列表。
|
||||
此 CLI 属于固定 Node 24 工程工具,不改变消费者运行环境或公开播放器接口。
|
||||
|
||||
新增 ASR 六文件与 Chromecast 一文件。ASR 使用实际 WebAudio/Worklet、本地媒体、
|
||||
原生或明确强制的 capture fallback、音量/CORS/Audio Track 组合;组合分别核验
|
||||
ASR 和 Audio Track 安装身份。Chromecast 使用真实核心 DOM/点击/本地视频及受控
|
||||
SDK,不验证接收设备、发现或远端媒体。其余未知真实环境保持各自任务门槛。
|
||||
候选加载器拒绝安装 map 与显式 artifact 同时使用;已发布输入仍按冻结归档加载。
|
||||
|
||||
VAST 主测试 externalize 后替换 wrapper 依赖,不能直接换为完整 bundle 并冒充
|
||||
真实安装验收,因此未纳入这个范围;实际 IMA 路径继续独立验证。没有修改生产
|
||||
源码、公开 API、超时、业务断言、依赖或锁文件。历史包内说明中的硬编码清单
|
||||
改为指向 --browser 与共同清单,防止未来列表和文档漂移。
|
||||
|
||||
## 已验证的工程范围
|
||||
|
||||
Windows x64,Node 24.21.0、Yarn 1.22.22。--browser 实际创建十四包 run-N2u2Kr,
|
||||
正常构建/pack/独立安装/冻结复装与完整文件核验通过。通用消费者依然仅验证
|
||||
core/chapter 的 36 运行时、5 旧类型模式和 8 精确类型模式。
|
||||
|
||||
相关单元 357/357、工程 48/48、scoped lint、library 类型、严格工具链、工作流
|
||||
契约和 actionlint 1.7.12 通过(未调用 shellcheck/pyflakes)。初始未使用 import/
|
||||
顺序及既有测试行格式错误已改正;旧工作流负例依赖手写包名,修改为禁止手写
|
||||
部分名单后通过。中间失败日志保留,最终结果明确区分。
|
||||
|
||||
完整 installed collection 为 39 文件/1308 项;本轮实际执行新增七文件的 171 项,
|
||||
三引擎、workers=2、retries=0。结果、实际输入指纹与能力限制见机器证据。
|
||||
这不代表完整十四包矩阵或远端 CI 全绿;之前 Chapter/Audio/DASH 失败继续保留。
|
||||
部分既有包的文档措辞在准备快照后更新,发布前仍需重新打包绑定最终内容。
|
||||
|
||||
CI-01 仍 doing,ASR/CAST 真机门槛未关闭,没有推送或发布。回退此检查点恢复
|
||||
十二包名单和手写准备命令,不涉及生产代码回退。
|
||||
|
||||
## 实测结果
|
||||
|
||||
Chromium 153.0.8010.12 与 Firefox 155.0 各 57/57 通过;WebKit 26.6 为 15 通过、
|
||||
42 WebAudio 能力跳过。合计 129 通过、42 跳过、0 失败,耗时 173.947 秒,
|
||||
实际退出 0、无重试;这是新增范围的结果,不覆盖完整 1308 项安装清单。
|
||||
Chromecast 45 项均为受控 SDK 生命周期;ASR 84 项通过中 48 项选择候选,
|
||||
其余保留旧包控制。候选 ASR/Audio Track 的八项组合分别记录两个安装身份,
|
||||
不能把身份条数重复算作测试条数;在 skip 前记录的候选身份不计处理能力通过。
|
||||
|
||||
故意继承安装 map 后,source 入口清除它,三个 Chromium 定向用例 3/3 通过:
|
||||
ASR 原生 Worklet、ASR/Audio Track 组合、Cast 注册点击。四个实际选包身份均为
|
||||
source-build(组合包含两个包)。源码回归仍是定向范围,不代表全量源码矩阵。
|
||||
所有输入、命令、统计和 skip 注解见
|
||||
[机器证据](../baselines/ci-asr-cast-installed-validation.json)。归档目录为
|
||||
ci01-asr-cast-installed-report 与 ci01-asr-cast-source-report;原始日志和实际退出
|
||||
状态均保留。无新增运行失败,但 ASR 真机/物理输出、Cast 接收设备和整体发布
|
||||
门槛继续开放。
|
||||
@@ -2,7 +2,8 @@
|
||||
|
||||
浏览器CI现在分别执行 `yarn test:browser:source` 和
|
||||
`yarn test:browser:installed`。前者清除继承的安装map并保留全部spec;后者要求已
|
||||
核验的core/chapter/Ambilight/Canvas/Document PiP/Ads/Audio Track/VTT Thumbnail/Multiple Subtitles/HLS Control/DASH Control/Auto Thumbnail安装,执行明确列出的installed子集。两步不
|
||||
核验的统一包清单,执行明确列出的 installed 子集;清单维护在
|
||||
`scripts/browser-validation/scope.ts`。两步不
|
||||
吞失败,普通失败后仍保存另一范围的证据,分别上传browser-source/browser-installed。
|
||||
入口与报告规则见[维护说明](../scripts/browser-validation/README.md)。source全量
|
||||
耗时/60分钟预算、其余插件安装矩阵与远端运行仍待CI-01/CI-04,不计为已通过。
|
||||
@@ -165,3 +166,7 @@ common.js/bootstrap.js 由 browser 下的 TS 生成,源代码进入 typecheck:
|
||||
和根 lint,产物由 check:site-assets 比较;不再对生成 common.js 应用源码 lint。
|
||||
build:ts 生成声明 URL 清单后重建站点浏览器产物,check:editor-types 保持只读。
|
||||
新增 test:site-editor 并接入 test:node,新增真实 Monaco 交互测试走现有三引擎矩阵。
|
||||
|
||||
安装准备使用 `yarn test:package --browser`,从 browser-validation/scope.ts 的同一
|
||||
包清单生成,不再在工作流复制列表。默认 core/chapter 消费者及显式 --include 保留;
|
||||
此选项不表示全生态类型、SDK 或发布准入。
|
||||
+1
-1
@@ -509,7 +509,7 @@
|
||||
- ENG-09: [记录](changes/2026-09-12-ENG-09-integration.md) [记录](baselines/engineering-integration.json)
|
||||
- ENG-10: [记录](changes/2026-09-10-ENG-10-test-reliability.md) [记录](test-reliability.md)
|
||||
- ENG-11: [记录](build-analysis.md) [记录](baselines/bundle-attribution.json) [记录](changes/2026-09-11-ENG-11-build-analysis.md)
|
||||
- CI-01: [记录](ci-setup.md) [记录](changes/2026-09-13-CI-01-matrix-summary.md) [记录](baselines/ci-matrix-validation.json) [记录](changes/2026-09-13-CI-01-node-consumers.md) [记录](baselines/node-consumer-validation.json) [记录](changes/2026-09-14-CI-01-installed-full.md) [记录](baselines/ci-installed-full-validation.json) [记录](changes/2026-09-14-CI-01-source-chromium.md) [记录](baselines/ci-source-chromium-validation.json) [记录](changes/2026-09-15-CI-01-ads-installed.md) [记录](baselines/ci-ads-installed-validation.json) [记录](changes/2026-09-15-CI-01-subtitles-installed.md) [记录](baselines/ci-subtitles-installed-validation.json) [记录](changes/2026-09-15-CI-01-adaptive-installed.md) [记录](baselines/ci-adaptive-installed-validation.json)
|
||||
- CI-01: [记录](ci-setup.md) [记录](changes/2026-09-13-CI-01-matrix-summary.md) [记录](baselines/ci-matrix-validation.json) [记录](changes/2026-09-13-CI-01-node-consumers.md) [记录](baselines/node-consumer-validation.json) [记录](changes/2026-09-14-CI-01-installed-full.md) [记录](baselines/ci-installed-full-validation.json) [记录](changes/2026-09-14-CI-01-source-chromium.md) [记录](baselines/ci-source-chromium-validation.json) [记录](changes/2026-09-15-CI-01-ads-installed.md) [记录](baselines/ci-ads-installed-validation.json) [记录](changes/2026-09-15-CI-01-subtitles-installed.md) [记录](baselines/ci-subtitles-installed-validation.json) [记录](changes/2026-09-15-CI-01-adaptive-installed.md) [记录](baselines/ci-adaptive-installed-validation.json) [记录](changes/2026-09-15-CI-01-asr-cast-installed.md) [记录](baselines/ci-asr-cast-installed-validation.json)
|
||||
- CI-02: [记录](changes/2026-09-14-CI-02-pages-artifact.md) [记录](baselines/pages-artifact-validation.json) [记录](pages-deployment.md)
|
||||
- PILOT-01: [记录](changes/2026-09-10-PILOT-01-chapter.md) [记录](baselines/pilot-validation.json)
|
||||
- CORE-01: [记录](changes/2026-09-10-CORE-01-typed-utils.md) [记录](baselines/core-utils-validation.json)
|
||||
|
||||
@@ -1,5 +1,14 @@
|
||||
# 进度与证据
|
||||
|
||||
## CI-01 统一安装包清单并接入 ASR / Chromecast
|
||||
|
||||
新增 --browser 从同一清单准备十四包,实际安装核验通过;消除 CI 手写列表并
|
||||
保留默认/显式子集方式。新增七文件三引擎 171 项:129 通过、42 WebAudio 能力
|
||||
跳过;Cast 仅受控 SDK,设备门槛不变。源码定向 3/3、单元 357/357、工程 48/48
|
||||
通过,见[记录](changes/2026-09-15-CI-01-asr-cast-installed.md)。完整清单为
|
||||
39 文件/1308 项,本轮未全跑。197/263 完成,CI-01 继续 doing;下一步处理其余
|
||||
包的完整产物/资源映射,VAST 的依赖替换测试不能冒充已安装完整 bundle。
|
||||
|
||||
## CI-01 自适应控制和自动缩略图接入安装矩阵
|
||||
|
||||
十二包实际安装通过,清单扩展到 32 文件/1137 项。新增七文件三引擎实跑
|
||||
|
||||
@@ -90,10 +90,10 @@ export function validateCIWorkflow(source) {
|
||||
const vueIndex = browser.steps.findIndex(step => step.run === 'yarn test:vue-consumer 2>&1 | tee refactor/.cache/ci/vue-consumer.log')
|
||||
assert(vueIndex > consumerIndex && !Object.hasOwn(browser.steps[vueIndex], 'if'), 'Run Vue installed consumers after restoring canonical Node')
|
||||
assert(browser.steps.some(step => step.uses?.startsWith('actions/upload-artifact@') && step.if === 'always()' && step.with.path.split('\n').includes('refactor/.cache/vue-consumer-*/')), 'Retain Vue consumer failure evidence')
|
||||
const extraIndex = browser.steps.findIndex(step => step.run?.startsWith('yarn test:package --include=artplayer-plugin-ambilight,artplayer-proxy-canvas,artplayer-plugin-document-pip,artplayer-plugin-ads,artplayer-plugin-audio-track,artplayer-plugin-vtt-thumbnail,artplayer-plugin-multiple-subtitles,artplayer-plugin-hls-control,artplayer-plugin-dash-control,artplayer-plugin-auto-thumbnail '))
|
||||
const extraIndex = browser.steps.findIndex(step => step.run?.startsWith('yarn test:package --browser '))
|
||||
const sourceEngineIndex = browser.steps.findIndex(step => step.run === 'yarn test:browser:source 2>&1 | tee refactor/.cache/ci/browser-source.log')
|
||||
const engineIndex = browser.steps.findIndex(step => step.run === 'yarn test:browser:installed 2>&1 | tee refactor/.cache/ci/browser-installed.log')
|
||||
assert(extraIndex > Math.max(consumerIndex, reactIndex, vueIndex) && extraIndex < engineIndex, 'Prepare installed Ambilight/Canvas/Document PiP/Ads after consumer probes and before browser checks')
|
||||
assert(extraIndex > Math.max(consumerIndex, reactIndex, vueIndex) && extraIndex < engineIndex, 'Prepare the shared installed browser roster after consumer probes and before browser checks')
|
||||
assert(!Object.hasOwn(browser.steps[extraIndex], 'if') && browser.steps[extraIndex].run.includes('GITHUB_ENV') && browser.steps[extraIndex].run.includes('ARTPLAYER_BROWSER_ARTIFACTS='), 'Always select the additional installed browser artifact map')
|
||||
assert(sourceEngineIndex > extraIndex && sourceEngineIndex < engineIndex, 'Retain complete source checks before the additional installed suite')
|
||||
for (const index of [sourceEngineIndex, engineIndex]) {
|
||||
|
||||
@@ -33,17 +33,20 @@ for (const [name, mutate] of [
|
||||
['conditional Node setup', w => w.jobs.checks.steps.find(s => s.uses?.startsWith('actions/setup-node@')).if = 'false'],
|
||||
['wrong consumer Node version', w => w.jobs['browser-smoke'].steps.find(s => s.id === 'consumer-node-20').with['node-version'] = '24'],
|
||||
['skipped installed consumer', w => w.jobs['browser-smoke'].steps.find(s => s.run?.includes('--expected-node 22.12.0')).if = 'false'],
|
||||
['missing browser plugin installation', w => w.jobs['browser-smoke'].steps.find(s => s.run?.startsWith('yarn test:package --include=')).run = 'echo omitted'],
|
||||
['missing Document PiP browser installation', (w) => {
|
||||
const step = w.jobs['browser-smoke'].steps.find(s => s.run?.startsWith('yarn test:package --include='))
|
||||
step.run = step.run.replace(',artplayer-plugin-document-pip', '')
|
||||
['missing browser plugin installation', w => w.jobs['browser-smoke'].steps.find(s => s.run?.startsWith('yarn test:package --browser')).run = 'echo omitted'],
|
||||
['manual partial browser package roster', (w) => {
|
||||
const step = w.jobs['browser-smoke'].steps.find(s => s.run?.startsWith('yarn test:package --browser'))
|
||||
step.run = step.run.replace('--browser', '--include=artplayer-plugin-ambilight')
|
||||
}],
|
||||
['skipped browser plugin installation', w => w.jobs['browser-smoke'].steps.find(s => s.run?.startsWith('yarn test:package --include=')).if = 'false'],
|
||||
['skipped browser plugin installation', w => w.jobs['browser-smoke'].steps.find(s => s.run?.startsWith('yarn test:package --browser')).if = 'false'],
|
||||
['missing source browser checks', w => w.jobs['browser-smoke'].steps.find(s => s.run?.startsWith('yarn test:browser:source ')).run = 'echo omitted'],
|
||||
['filtered source browser checks', w => w.jobs['browser-smoke'].steps.find(s => s.run?.startsWith('yarn test:browser:source ')).run += ' --grep subset'],
|
||||
['source failure prevents installed evidence', w => w.jobs['browser-smoke'].steps.find(s => s.run?.startsWith('yarn test:browser:installed ')).if = 'success()'],
|
||||
['ignored installed failure', w => w.jobs['browser-smoke'].steps.find(s => s.run?.startsWith('yarn test:browser:installed '))['continue-on-error'] = true],
|
||||
['missing separate source evidence', w => { const upload = w.jobs['browser-smoke'].steps.find(s => s.uses?.startsWith('actions/upload-artifact@')); upload.with.path = upload.with.path.replace('refactor/.cache/browser-source/\n', '') }],
|
||||
['missing separate source evidence', (w) => {
|
||||
const upload = w.jobs['browser-smoke'].steps.find(s => s.uses?.startsWith('actions/upload-artifact@'))
|
||||
upload.with.path = upload.with.path.replace('refactor/.cache/browser-source/\n', '')
|
||||
}],
|
||||
['browser runtime not restored', w => w.jobs['browser-smoke'].steps.find(s => s.id === 'restore-canonical-node').with = { 'node-version': '22.12.0', 'package-manager-cache': false }],
|
||||
['skipped React consumer', w => w.jobs['browser-smoke'].steps.find(s => s.run?.startsWith('yarn test:react-consumer')).if = 'false'],
|
||||
['removed React consumer', w => w.jobs['browser-smoke'].steps = w.jobs['browser-smoke'].steps.filter(s => !s.run?.startsWith('yarn test:react-consumer'))],
|
||||
|
||||
+3
-1
@@ -768,7 +768,9 @@
|
||||
"changes/2026-09-15-CI-01-subtitles-installed.md",
|
||||
"baselines/ci-subtitles-installed-validation.json",
|
||||
"changes/2026-09-15-CI-01-adaptive-installed.md",
|
||||
"baselines/ci-adaptive-installed-validation.json"
|
||||
"baselines/ci-adaptive-installed-validation.json",
|
||||
"changes/2026-09-15-CI-01-asr-cast-installed.md",
|
||||
"baselines/ci-asr-cast-installed-validation.json"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
||||
Reference in new issue
Block a user