mirror of
https://gitcode.com/JianFeeeee/HomeAgent.git
synced 2026-11-01 23:07:30 +00:00
2026-10-21 的 main 流水线(dfc4e16)里,「前置检查 gitcode 目标仓是否存在」 首次执行时 gitcode 没有给出预期响应,一次 ls-remote 判失败 ⇒ sync job 红; 重跑立刻全绿。把一次网络抖动翻译成「镜像同步坏了」,是纯噪声。 改法:只对**网络层**失败重试,其余立即失败。 - 网络层(DNS/连接重置/TLS/超时/EOF)→ 最多 3 次,退避 5s、10s - 仓不存在(gitcode 实测:could not be found + **403**,不是 404) → 立即失败,不重试。重试只会把「去建仓」拖成十几秒空等 - 凭据问题(401/403 但不带 not-found 特征)→ 立即失败,不重试 (token 错了等 15 秒也不会变对) - 分类顺序上 notfound 必须先于 403:gitcode 的「仓不存在」响应里 **同时**含 could not be found 与 error: 403,先判 403 会把真问题贴上 「凭据问题」的错误标签 - 每次尝试打一行「第 N/M 次探测失败(类别):摘要」;重试提示打到 stderr (⏳ … 秒后重试),Actions 日志里一眼看得出发生过重试 - 耗尽重试时整段回放每次尝试的摘要,并明确写「判定:网络问题」 —— 与「仓不存在」/「凭据问题」的判定措辞互不相同,可直接 grep 区分 同口径:**抽成 .github/scripts/check-gitcode-repo.sh,两个 workflow 共用同一个 文件**,而不是两边各写一份「逐字一致」的脚本 —— 后者迟早会漂。ci.yml 的 sync-gitcode-main 与 release.yml 的 sync-gitcode 各留 1 行 bash 调用。 (抽得出公共片段,故没有采用「两边逐字改」的方案。) token 安全:GC_URL 含 token,永不 echo;所有输出先过 redact()。脱敏两道: 先按字面量遮 token(BRE 元字符先转义),再按 URL 结构遮 userinfo@。 结构式的 password 段**不能排除 `/`** —— 真实 token 可以含 `/`,第一版写成 [^@/[:space:]]* 时 `https://user:tok/en@host` 匹配不上,只剩字面量一道兜住 (判据 C6 首次就是红的)。 判据与变异(9 组正向 / 8 条变异,全部咬住): 判据脚本与变异脚本见 commondev 台账 criteria/b7-gitcode-precheck-retry{,.mutations}.sh。 正向覆盖:重试次数上限(恰好 3 次探测)、仓不存在时 1 次即失败无重试痕迹、 首次成功无重试噪声、抖动后第 2 次成功、凭据问题不重试、token 不进日志、 默认退避真的是 5s/10s(用假 sleep 记录入参,不真等 15 秒)、 两处 workflow 都调同一脚本事 yaml 可解析 + bash -n。 变异 8/8 咬住:默认次数 3→1、退避→0、仓不存在也重试、去掉上限、 去掉重试提示、清空 notfound 特征串、去掉结构式脱敏、ci.yml 退回内联 ls-remote。 过程中修掉三处自己判据的盲区(都不是改产物去迁就判据,而是补判据): 1. M2(退避→0/0)首次未被咬住 ⇒ 补 C7「默认退避 = 5 10」(假 sleep 记录入参) 2. M7(删结构式脱敏)首次未被咬住 ⇒ 补 C7b:userinfo 密码用**别的** secret 且**含 `/`**。C6 用当前 token 的字面量做输入,字面量替换本身就能抹掉, 于是结构式规则删了也照样绿;且密码不含 `/` 时兜底的裸 user@ 规则会顶上, 同样验不出来 3. C7b 第一版断言 grep 'JianFeeeee' 会误报 —— 脚本正常输出里就有 gitcode.com/JianFeeeee/HologramAgent(那是路径不是凭据),改为断言 userinfo 形态(://JianFeeeee[:@]) 真实网络实测(不是只跑假 git): - 仓存在:目标仓可访问,rc=0 - 仓不存在:1 次探测即失败,日志含 could not be found + 403,rc=1 - 网络失败:3 次探测 + 2 次退避,总耗时 5.7s(退避调成 1s/1s),rc=1 yaml.safe_load 三个 workflow 全部可解析;bash -n 通过。 未改动(留待裁决):deploy/scripts/upload_assets.py docstring 里 「SDK 仓传 JianFeeeee/homeagent-sdk」指 gitcode 侧、与实测一致 (gitcode: homeagent-sdk=200 / homeagentsdk=404;GitHub 相反),保持原样。