快照(Snapshot)
Snapshot 是 Canyon 对某个覆盖率视图的“冻结产物”。它会把当时的覆盖率数据与可直接打开的报告页面一起打包保存,便于后续对比、归档和共享。
一、核心价值
- 可追溯:把某一时刻的覆盖率结果固化,不受后续分支变化影响。
- 可下载:直接下载报告包(
artifact_zip),本地解压即可查看index.html。 - 可对比:同一仓库可按
commit或compare维度留存多份快照。
二、支持的 subject
Snapshot 支持两类 subject:
commit:某个 commit 的全量覆盖率快照compare:base...head对比视图的覆盖率快照
这也是前端列表中“总体覆盖率”和“变更代码覆盖率”互斥显示的原因:
commit:重点看总体覆盖率compare:重点看变更代码覆盖率
三、状态流转
创建快照后,状态会按以下流程变化:
generating:生成中completed:生成完成,可下载failed:生成失败timeout:超时(默认 120 秒)
系统会在查询列表/详情时对超时任务做状态修正,避免长期停留在 generating。
四、生成产物内容
Snapshot 不是只存一份原始 JSON,而是生成可视化报告包:
- 拉取覆盖率 map(按
subject/subjectID/buildTarget) - 通过 Git Provider 拉取对应 commit 的源码内容
- 生成
report-data.js - 用
@canyonjs/report-html的dist产物替换data/report-data.js - 打包为 zip,写入
artifact_zip
最终下载后可直接打开 index.html 浏览报告。
五、落库指标(用于统计/看板)
生成完成时,Snapshot 会写入以下关键指标:
statements_coveredstatements_totalchangestatements_coveredchangestatements_totalduration_ms(报告生成耗时,毫秒)
百分比可以按需自行计算:
- 总体覆盖率:
statements_covered / statements_total - 变更覆盖率:
changestatements_covered / changestatements_total