用途
Maintenance Prep Skill 用于在 XerahS 工作区中,为请求的维护或发布工作准备仓库与子模块状态。它不适用于日常编辑,只有在涉及发布、变更日志或例行仓库维护时使用。该技能本身不是提交、推送、打标签或版本前缀规则的唯一来源,相关规则分别由 git-workflow、update-changelog、publish-release 以及 AGENTS.md 承担。
主要能力
该技能可以完成以下工作:
- 同步主仓库与子模块。
- 当维护任务明确涉及同级仓库时,检查这些同级仓库。
- 判断是否需要进行版本号提升或变更日志更新。
- 在改动完成后运行相关的预提交构建。
- 把最终的暂存、提交、推送与打标签决策交给 git-workflow 或 publish-release。
技能明确要求:不要用它来发明提交信息格式、子模块版本前缀、发布标签或变更日志分组规则。
使用方式
工作流按以下步骤进行。
1. 同步前检查状态
在任何拉取或子模块更新之前,先于 XerahS 仓库根目录运行:
git status --short
git submodule foreach --recursive "git status --short"
对于任务中涉及的可选同级仓库:
git -C ../xerahs.github.io status --short
git -C ../ShareX status --short
如果主仓库、子模块或范围内同级仓库存在本地改动,不要直接拉取覆盖。应先提交、暂存,或明确暂停等待所有者决定。子模块的改动属于该子模块仓库。
2. 同步干净的仓库状态
仅在相关仓库干净后,才从 XerahS 仓库根目录运行:
git pull --recurse-submodules
git submodule update --init --recursive
git submodule update 可能因检出父仓库记录的精确提交而使子模块 HEAD 处于分离状态。必须执行后续操作:将 ShareX.ImageEditor 重新附着到其跟踪的 develop 分支,并在继续发布或变更日志工作前快进:
git -C ShareX.ImageEditor fetch origin --prune
git -C ShareX.ImageEditor checkout develop
git -C ShareX.ImageEditor pull --ff-only origin develop
git submodule status ShareX.ImageEditor
git -C ShareX.ImageEditor status --short --branch
如果 ShareX.ImageEditor 无法快进、存在本地改动或仍处于分离状态,应中止并手动解决。如果快进改变了 XerahS 记录的子模块提交,应先提交并推送子模块,然后在父仓库中提交更新后的 XerahS gitlink。
如果任务还涉及可选同级仓库,只同步处于范围内的干净仓库:
git -C ../xerahs.github.io pull origin main
git -C ../ShareX pull origin develop
不要因为可选同级仓库存在就拉取它们。
如果子模块自身有改动,应将其视为独立仓库。共享库子模块提交(如 ShareX.ImageEditor)必须遵循 git-workflow,并省略 XerahS 应用版本前缀。
3. 检查版本需求
从根目录 Directory.Build.props 读取当前 XerahS 应用版本:
$version = (Select-String -Path Directory.Build.props -Pattern '<Version>(.+?)</Version>').Matches[0].Groups[1].Value
git tag --sort=-v:refname | Select-Object -First 1
仅在任务明确涉及版本管理或发布准备时才提升版本。如果需要提升,使用 git-workflow 获取版本来源与前缀规则,或使用 publish-release 执行完整的发布提升/打标签流程。
SkiaSharp 仍在 Directory.Packages.props 中集中管理;不要重新引入项目本地的旧式固定版本。
4. 按需更新变更日志
对于变更日志工作,使用 update-changelog。优先使用辅助脚本生成草稿:
powershell -NoProfile -ExecutionPolicy Bypass -File .ai/skills/update-changelog/scripts/update-changelog.ps1
发布前需人工审核生成的变更日志文本,确保分组、贡献者归属和措辞准确。
5. 构建门禁
对于代码/配置改动,在推送前运行必需的构建:
dotnet build src/desktop/XerahS.sln
不要仅因为经过固定时长就停止构建。如果构建确实卡住,清理过期的构建进程/锁,优先使用 -m:1,然后重试。
纯文档类技能编辑不需要完整解决方案构建,除非它们影响需要本地执行的构建或发布脚本。
6. 提交与推送交接
使用 git-workflow 进行最终的暂存、提交信息、版本前缀和推送行为。
要点:
- XerahS 应用提交仅在确认根版本领先于最新标签后,才使用 [vX.Y.Z] [Type] description。
- 共享库或仅子模块的提交省略 [vX.Y.Z],使用 [Type] description。
- 当父仓库记录更新后的子模块指针时,先推送子模块提交,再推送父仓库。
- 不要通过此技能给发布打标签;使用 publish-release。
适用场景
适用于需要对 XerahS 仓库进行发布准备、变更日志维护或例行仓库维护的场景,包括同步主仓库与子模块、检查版本提升需求、生成变更日志草稿以及运行预提交构建。
限制
该技能明确不应用于发明提交信息格式、子模块版本前缀、发布标签或变更日志分组规则。它也不负责最终的打标签操作。普通代码编辑不应触发此技能。文档类技能编辑在不妨碍构建或发布脚本时,无需运行完整解决方案构建。