codescan/code-scan-hubv1.0.21878ffc9(base) → 7fdeaadf(head)本次增量仅改动 1 个文件:src/api/trigger.rs(3 处 hunk),无新增/删除文件。
| 变更点 | 位置 | 说明 |
|---|---|---|
新增字段 actor | src/api/trigger.rs:43-46 | IncrementalTriggerRequest 增加 #[serde(default)] pub actor: Option<String>(CI 传 gitea.actor) |
新增字段 actor | src/api/trigger.rs:63-66 | BaselineTriggerRequest 同样增加 actor 字段 |
| 写入触发上下文 | src/api/trigger.rs:220-225 | trigger_incremental 的 create_task 的 trigger_context JSON 增加 "actor": body.actor |
功能语义:为“报告列表显示发起人”需求提供 Hub 侧数据写入。#[serde(default)] 保证旧 CI 调用(不带 actor)向后兼容,不会 400。
⚠️ 注意:
trigger_baseline的create_task(src/api/trigger.rs:300-308)未同步写入 actor,仍为Some(json!({"branch": body.branch}))。详见第四节。
调用 codescan.issues_diff(base → head)结果:修复 3 条 / 新增 4 条,全部集中在 src/api/trigger.rs。
| 严重度/类型 | 位置(base) | 建议 |
|---|---|---|
| Medium/Dependency 高耦合 | src/api/trigger.rs:127 | 拆分函数或引入接口降低耦合 |
| Medium/Dependency 高耦合 | src/api/trigger.rs:150 | 拆分函数或引入接口降低耦合 |
| Medium/Dependency 高耦合 | src/api/trigger.rs:235 | 拆分函数或引入接口降低耦合 |
| 严重度/类型 | 位置(head) | 描述 |
|---|---|---|
| Medium/Dependency 高耦合 | src/api/trigger.rs:135 | authorized 直接依赖 11 个函数,超过阈值 10 |
| Medium/Complexity 函数过长 | src/api/trigger.rs:158 | trigger_incremental 过长(84 行) |
| Medium/Dependency 高耦合 | src/api/trigger.rs:158 | trigger_incremental 直接依赖 17 个函数,超过阈值 10 |
| Medium/Dependency 高耦合 | src/api/trigger.rs:247 | trigger_baseline 直接依赖 17 个函数,超过阈值 10 |
authorized / trigger_incremental / trigger_baseline 三个函数在 head 中依然存在且仍有耦合问题(见 2.2 的 135/158/247)。base 的 127/150/235 与 head 的 135/158/247 是同一批问题的行号位移(顶部新增字段 + JSON 块扩写导致整体下移约 8 行),工具按行号匹配,故判为“旧问题消失、新问题出现”。耦合存量问题并未消除。trigger_incremental 因 trigger_context JSON 由单行扩展为多行块,触发了 函数过长(84 行) 阈值告警——属本次改动直接带来的可维护性退化(低烈度,但可持续累积)。以下为质量地图未覆盖、但由本次变更直接引入的具体问题,建议优先处理。
actor)新增字段后未同步更新测试模块中的结构体字面量。Rust 中 #[serde(default)] 只影响反序列化,不作用于字面量构造,因此以下位置在 cargo test 时会因缺少 actor 字段而编译失败:
| 位置 | 代码 |
|---|---|
src/api/trigger.rs:376-383 | test_validate_incremental_ok 中 IncrementalTriggerRequest { ... repo_url: None } 未含 actor |
src/api/trigger.rs:390-398 | test_validate_incremental_errors 的 no_project 字面量未含 actor |
src/api/trigger.rs:442-448 | test_validate_baseline_ok 的 BaselineTriggerRequest { ... } 未含 actor |
src/api/trigger.rs:455-461 | test_validate_baseline_errors 的 no_project 字面量未含 actor |
src/api/trigger.rs:500-509 | 公共基线构造 fn base_request() 未含 actor(..base_request() 展开的用例会连带失败) |
影响:
cargo build不受影响(mod tests为#[cfg(test)]),但cargo test会整体编译失败,CI 单测门禁会红灯。 修复:为上述字面量补actor: None(或改用..Default::default())。
BaselineTriggerRequest.actor(src/api/trigger.rs:63-66)经 serde 解析后从未被读取;trigger_baseline 的 create_task args(src/api/trigger.rs:307-308)仍只写 branch。
scan_tasks.args 中不会出现 actor,该路径的“发起人”需求失效;BaselineTriggerRequest 亦成为只写不读的字段(可能触发 dead_code 提示)。Some(json!({"branch": body.branch})) 改为同时写入 "actor": body.actor。需求名称为“报告列表显示发起人”,但读取/展示链路尚未建立:
GET /api/v1/scans(src/api/scans.rs:159-169)与任务详情 GET /api/v1/scans/{id}(src/api/scans.rs:182-200)返回体均不含 args,前端拿不到 trigger_context.actor。args.get("actor") 读取点;唯一读取 args 的后端逻辑(src/orchestrator/scheduler.rs 读 tag、src/orchestrator/release.rs 读 version)均不涉及 actor。web/、templates/、frontend/ 均不存在),报告页由另一仓库的前端站点渲染。args(或 actor 字段)并在前端渲染后才闭环。migrations/010_scan_tasks_args.sql:6-9 的 key 说明(tag/base_tag/version/ref/branch)未补 actor。src/store/entities/scan_tasks.rs:43-44 的字段注释同样未补 actor。src/api/webhook.rs(push 触发)与 src/api/scans.rs(手动触发)的触发上下文均不含 actor;src/orchestrator/release.rs:105 已写入 PR 作者 login。历史/其他来源任务将按注释兜底显示“—”,属预期,但需在展示侧统一兜底口径。
trigger_incremental 函数过长(Medium)。无 High 级质量地图问题。src/api/trigger.rs 测试模块 6 处结构体字面量的 actor 字段(否则 cargo test 编译失败)。trigger_baseline 写入 actor,否则 baseline 路径需求失效。GET /api/v1/scans、/scans/{id})暴露 trigger_context/actor,供前端报告列表展示。migrations/010 与 scan_tasks 实体注释。trigger_incremental 的重复错误处理/上下文拼装抽取为辅助函数,缓解函数过长与高耦合(authorized 11 依赖、trigger_incremental/trigger_baseline 各 17 依赖)。src/api/trigger.rs:512-519 | 公共基线构造 fn base_baseline() 未含 actor |