src/.agents/skills/release/SKILL.md
为 STranslate 项目准备一次正式发布:校验 tag、汇总自上一个 tag 以来的改动、按既定风格生成 CHANGELOG.md,并给出打 tag 推送以触发 GitHub Actions 自动打包发布的步骤。
v2.0.x(v + 三段语义化版本号,x 为占位符)的 tag → .github/workflows/dotnet.yml 在 windows-latest 上构建,并用 CHANGELOG.md 作为 GitHub Release 的 body(body_path: CHANGELOG.md),产物发布到 publish/*。无需 Token,permissions: contents: write。build.ps1 会去掉 v 前缀并以 /p:Version= 传入 dotnet 构建,同时改写 src/SolutionAssemblyInfo.cs 后用 git restore 还原。不要手动改任何版本号文件。git cat-file -t v2.0.8 → tag),用 git tag -a 创建。CHANGELOG.md 是整文件覆盖式发布说明,每次发版前重写为本次内容(GitHub Release body 就是它)。git describe --tags --abbrev=0(取最新 vX.Y.Z tag)。v + 三段语义化版本号,即 v主.次.修订,例如 v2.0.9、v2.1.1、v3.0.9 均合法。v 前缀不可省略,必须是恰好三段数字。
v2.0.8 → v2.0.9),用于纯 bugfix / 小幅优化发版。v2.1.0,跨大版本重构可指定 v3.0.0。版本号段由用户决定,技能不替用户判断该跳 minor 还是 patch——但格式必须合规。v 前缀、用 v2.0.x 这种字面占位符、四段号或带构建号后缀(如 v2.0.9.1、v2.0.9-beta)、只有两段(如 v2.0)。2.0.x(无 v)或 1.5.x.x 形式,但 v2.0.0 起统一为 v主.次.修订,新发版一律沿用此格式。^v\d+\.\d+\.\d+$,否则停下来告知用户格式不符并给出正确建议,不要自行假设。git log <上一个tag>..HEAD --pretty=format:"%h %s" --no-merges
--no-merges 过滤掉,因为它们不携带语义信息。chore: update version to v...、docs: update changelog and publish ...、chore: bump version、c1deb830 这类仅改 CHANGELOG / 版本号的提交一律不计入更新说明。fix(compact): ...、fix(placement): ...、fix(image-translate): ... 等,且该特性在同周期内才由 feat 引入)→ 不单独列条目,其效果并入对应特性的"添加/优化"条目即可,不单写"修复:xxx"。fix 涉及的模块在 <上一个tag> 是否已存在:不存在→属于新功能自修,忽略;存在→面向用户的回归修复,列入。chore:(除版本号外如 chore: revert ...、chore)、纯 docs:(设计文档、实现计划、规格说明)、纯内部 refactor: 无用户可见行为变化的提交——除非 refactor 带来了用户可感知的优化(则归入"优化:")。feat: / perf: / 有用户可见效果的 refactor: / 面向用户的 fix: → 进入更新说明。按项目既有风格,统一用中文动词前缀,不要直接搬运 commit message:
添加:——新功能、新插件、新配置项、新语种等用户能用上的新东西。优化:——改进既有行为、UI 调整、性能优化、逻辑完善、策略变更。修复:——仅限面向用户历史版本的回归修复(见上方过滤规则)。插件开发:——涉及 STranslate.Plugin 契约变更(新增接口方法、新增枚举、参数变更、版本号提升)时使用。可作为 ## 更新 下的内联条目(- 插件开发:...),也可在改动较多时单独成 ## 插件开发 区块。判断依据:是否改了 src/STranslate.Plugin/ 下的公共 API 或提升其版本。条目写法要点:
@sean908、#711),保留 @用户名 #PR号 的引用写法。整文件覆盖写入,结构严格如下(顺序、标题层级、链接不可变):
## 更新
- 添加:...
- 添加:...
- 优化:...
- 修复:...
## 插件开发
- `STranslate.Plugin` 更新至 `1.0.x`
- ...
## 其他
- [插件市场](https://stranslate.zggsong.com/plugins.html)
- [使用说明](https://stranslate.zggsong.com/docs/)
- [集成调用](https://stranslate.zggsong.com/docs/invoke.html)
- [安装卸载](https://stranslate.zggsong.com/docs/(un)install.html)
- [FAQ](https://stranslate.zggsong.com/docs/faq.html)
**完整更新日志:** [v2.0.7...v2.0.8](https://github.com/STranslate/STranslate/compare/v2.0.7...v2.0.8)
规则:
## 更新 永远是第一行(文件开头无 # 标题、无空白)。条目内顺序:先 添加: 再 优化: 再 修复:,每类内按重要性/相关性排列。## 插件开发 区块仅当本次确有插件 API / 插件版本变更时才写;没有则整个区块省略,不要留空区块。## 其他 区块及其五条链接逐字照抄,永远不变。**完整更新日志:** 的链接:前一个 tag 和本次 tag 分别替换。仓庘认定为 STranslate/STranslate。修复:)。chore: update version to vX.Y.Z):
git add CHANGELOG.md
git commit -m "chore: update version to vX.Y.Z"
git tag -a vX.Y.Z -m "vX.Y.Z"
git push origin main
git push origin vX.Y.Z
.github/workflows/dotnet.yml 会自动构建并发布 GitHub Release,无需手动跑 build.ps1。^v\d+\.\d+\.\d+$(三段数字 + v 前缀)。若为默认递增则 = 上一 tag patch + 1;若用户指定了 minor/major 跳级,确认格式合规即可。<上一个tag>..HEAD,已用 --no-merges。## 更新 在文件第一行;## 其他 五条链接逐字一致。## 插件开发 仅在确有插件 API/版本变更时存在。git tag -a 创建(带注释),非轻量 tag。body_path: CHANGELOG.md 意味着发版时 CHANGELOG 当前内容会原样成为 Release 说明。所以每次发版前必须把 CHANGELOG 重写为本次的内容,历史版本的说明在 GitHub Releases 页面各自留存,无需在文件里累积。