维护记录#
完成的工作#
- 拉取 origin/master 的 6 个新提交(fast-forward),工作树已同步 ✅
- 应用户要求,只优化工作流 #1(拆分
chore: auto-fix content 噪音 commit),其他建议(PR 预览、URL 稳定、Dependabot)不动 ✅ - 实现
scripts/git-commit-push.ts 的自动 commit message 分类:- 5 个分类路径:rename / fm / format / covers / posts
- 混合或无法识别时回退到
--message-fallback
- 新增
--message-fallback 参数,deploy.yml 调用改为同时传 --message 和 --message-fallback - 顶层 CLI 代码包到
isMain 守卫,避免被 import 时误执行(之前 import 会因 process.exit(1) 失败) - 新增
scripts/__tests__/git-commit-push.test.ts,13 个测试覆盖所有分类路径 - 测试 + E2E dry-run 验证:rename 漂移 →
chore(rename): sync post slugs (N files);fm 注入 → chore(fm): inject frontmatter (N files);混合 → fallback - 全部测试 164/164 通过,Hugo 构建 clean ✅
遇到的问题#
- 测试陷阱 1:git rename 检测对短文件失败 ⚠️
- 最初测试 fixture 只写 10 行 body,git
-M20% 阈值下也检测不出 rename - 实际 rename-posts.js 跑的都是 30+ 行文章,body 微调 < 20% 行
- 解决:测试 fixture 加到 40 段,模拟真实文章密度
- 测试陷阱 2:git mv vs 文件系统 mv ⚠️
- 最初用
mv 改文件名 + writeFileSync 覆盖,git 不识别为 rename(变 A+D) - 解决:改用
git mv + 追加一行,模拟 rename-posts.js 真实操作
- 测试陷阱 3:Apple Git 的
git rm 副作用 ⚠️git rm 删除 tracked 文件后,git 2.x 会清理空目录- 后续
writeFileSync 写新 SVG 时 ENOENT - 解决:测试 setup 时预放
.gitkeep 占位文件
- 模块化陷阱:顶层代码副作用 ⚠️
- 把分类函数
export 给测试用后,import 时顶层 if (!message) process.exit(1) 会触发 - 解决:用
pathToFileURL(process.argv[1]).href === import.meta.url 守卫 CLI 代码
- 未用 import ⚠️
- 测试文件 import 了
join from 'node:path',但实际用的是 Array.prototype.join - 自审时发现并清理,避免污染
决策点#
- 不改
sync-covers.yml 的调用方式:它只传 --message 不传 --message-fallback,新脚本会让 fallback = --message(原行为)。而且它的场景(cover IO)会被自动分类为 chore(covers): ...,永远走不到 fallback 分支。比之前更精确 ✅ - 降级策略而非强制分类:当改动是"rename + 改了正文"或"fm 注入 + 新建 cover"这种混合,分类不可靠,返回 null 让 fallback 接住。不冒险乱分类
下次建议#
- 观察接下来几天的 auto-fix commit,如果
chore(rename) / chore(fm) 频繁出现,说明分类正确;如果大量 chore: auto-fix content (fallback) 出现,说明有分类逻辑没覆盖的场景,需要扩展 sync-covers.yml 也可以从 chore(assets): remove orphan cover images 升级到自动分类(会产出 chore(covers): -N cover image(s)),让两个 workflow 的 commit 风格统一
文件变更清单#
- 新增:
scripts/__tests__/git-commit-push.test.ts(13 测试) - 修改:
scripts/git-commit-push.ts(+196 行:isMain 守卫 + classifyStagedChanges + 子函数) - 修改:
.github/workflows/deploy.yml(commit step 加 --message-fallback + 注释)