Skip to content

增加 CI 质量与安全合并门禁#106

Merged
liuzhao1225 merged 1 commit into
mainfrom
codex/ci-quality-and-security-gates
Jul 14, 2026
Merged

增加 CI 质量与安全合并门禁#106
liuzhao1225 merged 1 commit into
mainfrom
codex/ci-quality-and-security-gates

Conversation

@liuzhao1225

Copy link
Copy Markdown
Owner

问题

仓库没有 GitHub Actions,也没有可作为合并门禁的前端质量、安全审计和后端测试检查。完整 Python 运行依赖包含 CUDA、Torch、Whisper、VoxCPM 等重型组件,直接用于普通 CI 不可维护。

根因

  • 前端 lint、TypeScript、测试、构建和 npm 安全审计只依赖人工执行。
  • 后端只有会回引完整生产依赖的 requirements,没有单元/API 测试专用的轻量依赖集合。
  • 部分未被当前单元测试执行的音频库在模块导入阶段加载,迫使测试环境安装 SciPy/Numba/LLVM 等重型传递依赖。

修复方案

  • 新增 质量与安全门禁 workflow,在 PR 与 main push 上运行两个稳定检查:前端质量与安全后端测试
  • 前端使用 Node 22 和干净 npm ci,依次运行 9 个测试、ESLint、TypeScript、生产构建,以及显式指向 npm 官方源的生产依赖 audit;high/critical 会使检查失败。
  • 后端使用 Python 3.12 和独立 backend/requirements-test.txt,完整运行 322 个测试,不跳过任何测试。
  • 将 librosa/AudioStretchy 改为实际音频处理函数调用时再导入,使字幕/API 单元测试不需要无关重包,不改变生产调用路径。
  • 后端安装先使用阿里云镜像,仅失败时通过独立命令重试清华镜像;随后运行 pip check 和重型依赖 guard。
  • 所有官方 action 固定到已核对发布标签的完整提交 SHA;token 仅有只读内容权限,checkout 不持久化凭据,不读取 secrets。

验证结果

  • .env/env.txt 的临时 worktree + 全新 Python 3.12 venv:322 个后端测试通过,pip check 与重型依赖 guard 通过。
  • 全新前端安装:9 个测试、ESLint、TypeScript、Next.js 生产构建通过。
  • npm audit --omit=dev --audit-level=high --registry=https://registry.npmjs.org:退出码 0,无 high/critical;报告 2 个 Next 内嵌 PostCSS moderate。当前应用不接收、解析并内嵌用户 CSS,该公告要求的可控 CSS 输入链路不可达;不使用 --force 降级 Next。
  • workflow YAML 与 heredoc 结构已解析和等价执行验证。
  • git diff --check:通过。

后续门禁配置

本 PR 的两个检查首次成功后,将为 main 启用严格必需检查:

  • 前端质量与安全
  • 后端测试

并启用管理员同样受约束、禁止 force push 与删除。只有外部保护规则落地后,本项才视为完成。

明确后置

Python 版本锁定按 Goal 要求不在本分支实施。本项只提供经干净 CPU 环境验证的轻量直接依赖列表;constraints/lock、CPU/CUDA 矩阵和生产/开发依赖拆分将在单独中文 Issue 中跟踪。

审查

两路独立审查确认代码与 workflow 无 P0–P2 阻断项;未跟踪新文件风险已通过提交 dc0925d 的暂存清单核对闭环。

@liuzhao1225
liuzhao1225 merged commit 1929140 into main Jul 14, 2026
2 checks passed
@liuzhao1225
liuzhao1225 deleted the codex/ci-quality-and-security-gates branch July 14, 2026 07:35
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant