2d18193d38
两个 job 的第 1 步原先是 `uses: actions/checkout@v4`。`uses:` 的解析发生在 Prepare all required actions 阶段——先于任何步骤、无条件联网(默认 github.com), 且每个 job 各自解析进自己的 .cache/act/<hash>、跨 job 不复用。这条链在本机实测 不稳:run 36(10-21)/ 41(10-25)/ 42(10-26)三次都是 ~45 s 后整 job 死亡、 零钩子输出,而同一分钟手工 curl 同一地址返回 200——手工可达 ≠ CI 可用(解析器 跑在 SYSTEM 下)。Gitea 1.25.4 又去掉了自定义 DEFAULT_ACTIONS_URL,服务端没有 可拧的键,唯一归本仓库管的修法就是不再依赖它:两个 job 第 1 步换成原生 git 全量检出。 关键选择(依据与实测表见 docs/CI/远程CI完整指南.md 同文 §5.3,此处只记结论): - 完整 refspec + 全量,不是 --depth 1:提交信息门禁要解 base..head 的 range; 且目标 sha 不在历史里就 ::error:: 硬失败,绝不默默构建一棵错的树; - clean -ffd 而非 -ffdx:-x 会删被忽略文件,而 runner 工作区跨运行复用它们; - GIT_TERMINAL_PROMPT=0 + 空 credential.helper:否则认证挑战会等人类输入, 把 30 分钟 job 超时白烧掉,表现得像 CI 挂了; - 令牌只走 per-invocation -c http.extraheader(Basic + x-access-token,与 checkout@v4 同拼法),不落 .git/config、不回显;仓库公开时匿名即可; - 不抓 tag:本仓库 tag 数 0、无脚本用 describe --tags(实测)。 另修 scripts/ci_runner_bootstrap.ps1 的 Find-MsvcCl。旧版只扫 %ProgramFiles% 派生根且取首个命中:本机 C 盘 VS2019 已于今日 01:00 卸载(C 盘 x64 cl.exe 实测 0 个),旧版因此是「找不到 → 只 Warn → 不写」,机器级变量一直指着那条失效路径, 而 harness 对「显式设置但无效」是硬失败、不做自动回退。现在改为 vswhere 取实例 (能看见非默认盘)+ 工具集版本降序 + -MsvcToolset 前缀钉住世代(默认 14.51., 与覆盖率基线同版本;钉不上连 WARN 再回落最新,绝不静默)+ -MsvcLatest; -SetEnv 与 -Status 同步纳入 DTU_MS_COVERAGE。 验证(内层一律 powershell.exe 5.1,忠实复现 runner 执行方式):临时工作区六项 A/B/C/D/E/F——E 是执行**从 ci.yml 里抽出的正文**,测的就是文件那份字节。 A rc=0、commits=665、refspec 完整、分离 HEAD;B 复用工作区后 dirty_files=0、 被忽略文件保留、17ece86..HEAD 解出 18 个提交;C rc=1 且 HEAD 不动;D 坏令牌 fatal: unable to get password 秒失败;令牌改造后再跑 ANON/BOGUS/ANON2=0/1/0。 ci_local 全量:L0.5 = 40 runner、3188/3188 断言、fail=0(MSVC 14.51); test-coverage 与 ui-golden 均 Passed。.ps1 非 ASCII 字节 0、语法错误 0、无 BOM、 LF;ci.yml 无 BOM 无 CR、13 步、0 个 run 块含非 ASCII、uses: 计数 0。