远程 CI 文档独立成 docs/CI/:两篇重叠指南合并为一篇,AGENTS.md 压成一行指针
动因:远程 CI 只跑在本机一台 runner(win-stm32-ci)上,其他机器与项目都不涉及, 但内容散在 4 处约 2000 行——两篇高度重叠的指南躺在「环境与部署」里与换机核对清单 并列,AGENTS.md 提交门禁节还塞了 4 条 runner 运维经验,导致每次会话都被这些机器 专属细节干扰。 结构:新建 docs/CI/,README.md 作唯一入口(适用范围 + 章节速查 + 常用命令), 远程CI完整指南.md 为合并稿。 - 合并:CI配置指南 477 行 + Gitea_Runner部署指南 917 行 → 一篇 1300 行;骨架内容 逐行比对核实无丢失(仅章节重编号与相对链接按新位置改写),重复段按"留新版"去重, 独有内容全部搬入(下载/config.yaml 字段语义/不能用 Windows 服务的根因/内网 action 三种处置/check_env 自检/TL;DR/排障表 13 条独有行/MySQL 直查核验) - 再分配:测试流程 §9.2 两个 job 的步骤细节并入指南 §5.5、§9.4 部署前置表并入 §0.2; 测试流程 §9 只留测试分层视角(覆盖哪些层、触发与 paths-ignore、本地等价、 "CI 不替代本地门禁") - AGENTS.md:4 条 CI 经验(看门狗 / gitlint stage / UTF-16LE / CI 概览)压成 1 行指针 - 引用同步 6 个文件:docs/README 目录树与索引、项目部署环境要求 3 处、本地工具路径 环境变量方案、待处理内容、scripts/README(补登 3 个 CI 脚本并标注为本机专属) 验证:check_doc_links.py --all 125 篇 0 问题;pre-commit run --all-files 17 项全 Passed。 两篇旧文档以 git rm 删除(历史仍在 git 中);各文档变更记录的历史行按仓库惯例不改写, 只新增 2026-10-12 行。
This commit is contained in:
@@ -35,10 +35,7 @@ STM32F407ZGTx @168MHz(HSE 8MHz → PLL M=4/N=168/P=2);**仅 Keil MDK-ARM v
|
||||
- 提交信息:**单行中文标题 ≤100 字符**(gitlint `title-max-length=100`)+ **正文每行 ≤80 字符**(gitlint 默认 `body-max-line-length`,本项目未关)→ 长说明一律用**短标题 + `git commit -F -` 多行正文**(中文长标题极易超限);UTF-8 无 BOM + `git commit -F <文件>`(防终端转码破坏)
|
||||
- 代码规范 V1.0:小写下划线命名(`g_`/`s_`/`p_`/`a_` 前缀)、头文件保护宏 `XXX_H`、常量在右、文件头模块注释块 → `docs/代码规范/`
|
||||
- 全库扫描 `pre-commit run --all-files`;详见 `docs/代码规范/pre-commit使用说明.md`
|
||||
- **CI(Gitea Actions,2026-10-01 T-6)**:`.gitea/workflows/ci.yml` 在 push/PR 跑 **L0 静态门禁 + gitlint 提交信息门禁 + L0.5 主机侧单测**(Windows runner);**不含 L1/L2/L3**(需真机+ST-LINK)、**刻意不跑 `@build`**(需 Keil 授权)、无 `.map` 时自适应跳过 `mem-numbers`。本地等价自查:`& '.venv\Scripts\python.exe' scripts/ci_local.py`(**runner 未就绪时这是 L0 的唯一保障**,不能因"已配 CI"放宽本地门禁)。详见 `docs/测试说明/测试开发标准流程.md` §9
|
||||
- **`pre-commit run --all-files` 跑不到 `gitlint`**(2026-10-11 实测):`stages: [commit-msg]` 写在 **gitlint 上游的 `.pre-commit-hooks.yaml`**(本机证据 `~\.cache\pre-commit\repo*\.pre-commit-hooks.yaml`,**项目 `.pre-commit-config.yaml` 里根本没有这一行**——查不到不等于没限制,别在仓库配置里 grep 半天下结论),而 `--all-files` 只跑 `pre-commit` stage → **18 个钩子定义、CI 只报 17 个(`passed=16 skipped=1`)、且表现为全绿**(提交信息门禁曾在 CI 完全空转)。现由 `scripts/ci_gitlint_range.ps1`(CI)与 `ci_local.py` 的 **L0b** 段(本地)逐条校验;**增删钩子后必须核对"定义数 == 日志条数 + gitlint"**
|
||||
- **CI runner 必须有看门狗**(2026-10-11 实测):`gitea-runner` v4 的 `daemon` **无服务支持、首次 Declare 失败就直接退出进程**(Gitea 重启一次即停摆,run 16~21 共 12 个 job 零日志;叠加 `cancel-in-progress` 后症状是"任务凭空消失"而非失败)。⚠️ **计划任务的"失败重启"救不了它**——daemon 是**正常退出**不是失败,旧任务跑单次 `daemon` 会"成功结束"后再也不拉,必须**看门狗循环重拉**。体检 `& '.\scripts\ci_runner_bootstrap.ps1' -Status`(**须管理员**:非管理员会话可能看不见该任务)、干跑 `-DryRun`(免管理员校验任务对象)、部署 `-SetEnv -StartNow`(看门狗 + 开机计划任务 + MACHINE 级 `DTU_PRECOMMIT_PYTHON`/`DTU_CPPCHECK`/`DTU_MSVC_CL`——runner 以 SYSTEM 跑,看不见用户级 PATH/site)。改该脚本时守住两条:`StartWhenAvailable` 属**任务设置**(触发器上没这属性,误设抛 `SetValueInvocationException`)、且必须**先构建对象后注销旧任务**(否则旧任务被删、新任务没建成)
|
||||
- **写 `GITHUB_ENV`/`GITHUB_PATH`/`GITHUB_OUTPUT` 必须显式 `-Encoding ascii`**(2026-10-11 实测):PS 5.1 的 `Out-File -Append` **默认 UTF-16LE**,会把 `42 00 42 00 3D 00` 这种带 NUL 的行追加进 runner 以 UTF-8 建的同一文件里
|
||||
- **远程 CI(Gitea Actions)的全部资料集中在 [`docs/CI/README.md`](docs/CI/README.md)**——服务端开关、runner 部署与保活、workflow、排障,以及 gitlint stage / UTF-16LE / 看门狗等实测坑都在那里,**不放本节**(它**只跑在本机一台 runner `win-stm32-ci` 上**,其他机器与项目都不涉及,故与日常开发规范分开放,避免每次会话被这些机器专属细节干扰)。日常改代码的等价自查是 `& '.venv\Scripts\python.exe' scripts/ci_local.py`(L0 + L0b + L0.5)——**runner 不在线也不影响本地门禁,不能因"已配 CI"放宽本地要求**
|
||||
|
||||
## 平台约束
|
||||
|
||||
|
||||
Reference in New Issue
Block a user