docs: 统一多语言文档生成(源文件驱动、生成文件不入库) - #760
Conversation
技术性: - 添加 `script\multilingual-issue-templates\bug-提交.yml` 作为现有议题模板的唯一多语言源文件 - 添加 `script\manage_templates.py` 验证每个语种的纯度(防止简繁混杂),赋能本地验证和云端持续集成(CI) - 添加 `.githooks\pre-commit` 在提交前验证议题模板,阻止手动更改单语言模板 - 添加 `.github\workflows\check_issue_template_consistency.yml` 在云端验证和生成议题模板 - 添加 `pyproject.toml` 给出依赖;添加 `script\.gitignore` 忽略自动生成的 `requirement.txt` - 更改 `.gitignore` 将 Python 虚拟环境纳入其中(见 https://docs.python.org/3/library/venv.html ) - 添加 `CONTRIBUTING.md` 给出今后议题模板的维护指南 编辑性: - [breaking change] 更改议题模板中“预期”和“实际”小节的 ID - 议题模板中添加空行,改进排版
- 区分源文件、生成模板和生成贡献指南三类暂存内容 - 手动修改生成文件时先运行脚本再比对差异并阻止提交 - 源文件变更时自动生成模板并纳入暂存区 - 修复直接编辑 CONTRIBUTING 文档时无法拦截的问题 👷 ci(multilingual): 扩展多语言文件一致性检查 - 将工作流重命名为“多语言文件一致性” - 新增 CONTRIBUTING.md 与 CONTRIBUTING_zh-TW.md 的一致性校验 - 更新流程图,展示源文件生成议题模板和贡献指南的流程
- 新增 Jinja2 依赖到 pyproject.toml,用于模板化生成多语言文档 - 移除 _render_doc 函数,改用 Jinja2 Environment 加载 .md.j2 模板 - 新增 CONTRIBUTING.md.j2 通用递归模板,结构与层级完全由 YAML 键顺序及 heading 嵌套推断 - 启用 StrictUndefined,模板缺失字段时立即报错,避免生成不完整文档
3e658ef to
f947664
Compare
- `README`、`vscode-extension/README` 与 `CONTRIBUTING` 统一走 Jinja2 + YAML 源文件 - 源目录 `multilingual-issue-templates` 更名 `multilingual-docs` - 贡献者墙自动写入 `README.yml`(`update_contributors_images.yml` + `update_contributors.py`) - `pre-commit` 钩子覆盖三份生成文档,并强制 LF 行尾 - 单次使用符号内联
- 移除无条件运行的生成脚本,`git diff HEAD` 检测已暂存的手动修改,阻止提交并打印差异 - 新增 `test/test_pre_commit_hook.sh`:临时 git 仓库重演钩子行为 - 动态检测 GFM 块类型 × 行首/行中/行尾 + 列表/引用/alert 空行断块 - 源文件变更自动生成纳入、无关改动放行 - CI 接入钩子测试;`chmod +x` 保证 Linux 钩子可执行;trap 清理失败不阻塞
40f84cd to
8a9fa51
Compare
- `git rm --cached` + `.gitignore`:自述/贡献指南/扩展自述/议题模板等生成文件不再入库 - 钩子:源文件变更时生成到临时目录与工作区比对,检测手动修改生成文件并阻止 - `manage_templates.py` 加 `--doc-dir` 支持输出重定向 - CI:默认分支 `git add -f` 生成并提交;PR 验证 + 测试钩子 - 测试脚本适配“手动修改阻止 / 生成文件不入库 / 无关放行,全通过”
- 检测到生成文件与源文件不一致时,列出文件并提示改源文件或重新生成预览 - 交互询问 y/N:Y 重新生成到工作区并继续提交;N 取消提交 - 钩子 stdin 默认 /dev/null,交互提交时从 /dev/tty 读取 - 新增 GIT_HOOK_NONINTERACTIVE,供测试/CI 非交互环境默认 N - 测试脚本验证"重新生成"提示,三场景通过
81be1c0 to
3939c1e
Compare
- 新增"Windows 开发者注意事项":exec 位、CRLF/LF、钩子 stdin、PEP 668 常见坑 - 建议在 WSL 中测试以接近云端 CI,附 venv 准备步骤(依赖从 script/requirements.txt 安装)
c1dde45 to
68c60cd
Compare
- script/ai_review.py:拉取 PR diff → 调 DeepSeek → 生成结构化中文审查 - .github/workflows/ai-review.yml:pull_request 自动审 + /review 按需 + workflow_dispatch 说明:工作流需位于默认分支才能响应 issue_comment / workflow_dispatch / schedule 触发。
|
Tip @maboloshi 请安装 GitHub App gh-chinese-ai-reviewer 到您的账户 + 仅 github-chinese 仓库。 |
- 路径提取:排除 #! shebang,支持带已知扩展名的裸文件名(如 manage_templates.py) - 判定:提到任一已变更文件(或其 basename)即视为可能已解决 - 修复 #3/#4/maboloshi#6/maboloshi#7/maboloshi#8 等"已修复却误报未解决"的问题(从保留 6 条降到 3 条)
This comment has been minimized.
This comment has been minimized.
- _tr: ctypes 控制台代码页调用用 try-except 包裹(#5) - _generate_requirements: 捕获 tomllib 解析/KeyError 异常(maboloshi#7) - _collect_headings: 非 dict 节点安全返回 + heading 判空(maboloshi#8) - _resolve/_check_node: CN/TW 判断去掉 len==2 限制,改为仅检查键存在(maboloshi#9) - update_contributors_images: 改用 git diff 检测源文件 README.yml(生成文件未跟踪,git diff 检测不到)(#3) - maboloshi#10(eol=crlf 合理拒绝)、maboloshi#11(已实现 if -not $env:LANG) 不修改
- 增量规则:若历史意见已被用户明确拒绝(不采纳/不同意/没必要/NO 等), 本次审查中若仍存在则用 <details> 折叠区块收纳,标注『用户已拒绝,仅存档参考』 - summary 结构说明补充折叠区块格式示例 - 避免用户已否决的问题在正文反复突出
This comment has been minimized.
This comment has been minimized.
- update_contributors_images.yml 增加 schedule 每周一 03:00 UTC 自动触发 - 自动检测脚本/multilingual-docs/README.yml 源文件变更,重新生成 README.md 等并自动提交
🤖 AI 审查(DeepSeek)— PR #760概览本次 PR 将多语言文档生成流程重构为「YAML 源文件 + Jinja2 模板」模式,生成文件不入库,由 CI 自动生成提交。整体设计合理,但存在若干关键问题: 发现的问题🔴 阻断
🟠 重要
🟡 建议
🔵 nit
优点
重写/改进建议
由 |
解决与上游 gh-pages 的合并冲突: - .gitignore: 合并两侧规则(HEAD 生成文件忽略 + upstream logs) - README.md / vscode-extension/README.md: 按 PR 设计保留删除(生成文件不入库) - vscode-extension-README.yml: 同步上游 maboloshi#766 的 browser API 新架构,避免生成回退 - ai-review.yml / docs/ai-review.md / script/ai_review.py: 采用上游 maboloshi#768 版本(已合入,PR 不再包含) - pre-commit: 增强不一致提示(指导重新生成、警告 --no-verify),并支持 venv python.exe - test_pre_commit_hook.sh: 适配增强提示断言与 venv python 检测
- 三个内容相同的通用渲染模板(CONTRIBUTING/README/vscode-extension-README 的 .md.j2) 合并为公共模板 script/multilingual-docs/_common.md.j2 - _doc_config 内联文档输出配置,删除模块级 DOC_TEMPLATES - 修复 _collect_headings 的 Pylance 类型标注(dict[str, Any] + cast) - pre-commit 钩子新增:对暂存的 .py 文件自动运行 pyright 类型检查,有错误即阻止提交
- 钩子新增第一步:收集暂存区 .py 文件,用 pyright 类型检查,有任何错误即阻止提交 - 支持 SKIP_TYPECHECK=1 跳过(供测试等场景) - CI 的 Install dependencies 步骤补充安装 pyright - 钩子测试新增场景 D:类型错误应被 pyright 阻止;修复测试脚本 python shim (用 wrapper 脚本替代复制 venv exe,避免 pyvenv.cfg 定位失败)
简介
将议题模板、贡献指南(
CONTRIBUTING)与仓库/扩展自述(README)的多语言文档统一为「YAML 源文件 + Jinja2 模板」的自动化生成流程。生成文件不入库,由云端 CI 在默认分支自动生成并提交;开发者只需维护源文件。
变更内容
script/multilingual-docs/下的 YAML 源文件 +*.md.j2Jinja2 模板CONTRIBUTING、仓库README、vscode 扩展README、议题模板均由script/manage_templates.py生成简体/繁体版本script/requirements.txt安装(由pyproject.toml/--requirements生成).gitignore忽略生成文件并git rm --cached移除已跟踪文件;云端 CI 在默认分支用git add -f自动生成并提交pre-commit钩子:源文件变更时自动验证并检测手动修改/过时的生成文件,不一致时提示并交互询问 Y/N;支持--doc-dir重定向输出与GIT_HOOK_NONINTERACTIVEtest/test_pre_commit_hook.sh覆盖「阻止手动修改 / 放行无关改动 / 生成文件不入库」三场景check_issue_template_consistency.yml校验 + 钩子测试 + 默认分支自动生成提交验证
manage_templates.py --check全部通过(OpenCC 校验 CN/TW 一致性)test/test_pre_commit_hook.sh在 Windows 与 WSL 均通过应先于 #758 审查和合并