git-publish-release
GitHub Release
与 bensz-collect-bugs 的协作约定
- 因本 skill 设计缺陷导致的 bug,先用
bensz-collect-bugs规范记录到~/.bensz-skills/bugs/,不要直接修改用户本地已安装的 skill 源码;若有 workaround,先记 bug,再继续完成任务。 - 只有用户明确要求“report bensz skills bugs”等公开上报时,才用本地
gh上传新增 bug 到huangwb8/bensz-bugs;不要 pull / clone 整个仓库。
智能分析项目历史变化,自动生成吸引人的 Release Notes 并发布到 GitHub。
触发条件
用户需要:
- 发布项目的新版本到 GitHub
- 创建 GitHub Release 并自动生成 Release Notes
- 推送某个 tag 到 GitHub 并创建 release
- 总结版本间的历史变化
你需要确认的输入
- 目标 tag(如
v3.0.0)- 如未指定,列出最近 tags 供选择
- 项目路径(可选,默认当前工作目录)
认证通过
gh auth login管理,无需手动配置 token。
前置检查
确认 gh CLI 已安装并已认证:
gh auth status
如未认证,提示用户运行:
gh auth login
工作流程
确认项目信息
# 获取 owner/repo
REPO=$(gh repo view --json nameWithOwner -q .nameWithOwner)
获取最新 Release 信息
# 获取最近一次 release 的 tag
PREVIOUS_TAG=$(gh release list --limit 1 --json tagName -q '.[0].tagName')
- 如果存在历史 release,比较范围为:
PREVIOUS_TAG..TARGET_TAG - 如果是首个 release,比较范围为:从初始 commit 到
TARGET_TAG
分析历史变化
获取两个版本之间的 commit 历史:
# 如果有历史 release
git log ${PREVIOUS_TAG}..${TARGET_TAG} --pretty=format:"%h|%s|%an|%ad" --date=short
# 如果是首个 release
git log ${TARGET_TAG} --pretty=format:"%h|%s|%an|%ad" --date=short
生成 Release Notes
根据 commit 历史和项目特点,智能生成 Release Notes。
Release Notes 结构
🎉 [版本号] - [吸引人的标题]
[一句话总结本次发布的核心价值/意义]
🚀 核心亮点:
• [亮点1]
• [亮点2]
• [亮点3]
✨ 主要更新:
[类别1]
• 更新内容1
• 更新内容2
[类别2]
• 更新内容3
• 更新内容4
🔧 技术改进:
• 技术改进1
• 技术改进2
📋 完整变更日志:
[简略说明获取方式或列出主要 commits]
标题撰写原则
- 情感化表达:使用"革命性"、"突破性"、"里程碑"等词汇
- 场景化描述:说明这个版本解决什么问题、带来什么价值
- 时效性关联:如"为 2026 年就绪"、"拥抱新范式"
内容分类原则
根据 commit 信息自动分类:
| 类别图标 | 类别名称 | Commit 关键词示例 |
|---|---|---|
| 🚀 | 核心亮点 | breakthrough, major, feature |
| ✨ | 新功能 | add, new, feature |
| 🐛 | Bug 修复 | fix, bugfix, resolve |
| 🔧 | 技术改进 | refactor, optimize, improve |
| 📝 | 文档更新 | docs, readme, guide |
| 🔐 | 安全更新 | security, fix vulnerability |
| 💥 | 破坏性变更 | breaking, deprecate |
语言风格
- 简洁有力:每个要点不超过一行
- 价值导向:强调"为什么"而非仅仅"是什么"
- 用户视角:用用户能理解的语言,避免技术术语堆砌
- 适当煽动:使用感叹号、emoji 营造氛围,但不过度
判断是否为 Prerelease
根据 tag 名称自动判断:
- 包含
alpha,beta,rc,pre等标识 →prerelease: true - 否则 →
prerelease: false
创建 GitHub Release
# 将 Release Notes 写入临时文件(避免 shell 转义问题)
NOTES_FILE=$(mktemp /tmp/release-notes-XXXXXX.md)
cat > "$NOTES_FILE" << 'NOTES_EOF'
[生成的 Release Notes 内容]
NOTES_EOF
# 正式版
gh release create "$TARGET_TAG" \
--title "$TARGET_TAG" \
--notes-file "$NOTES_FILE"
# 预发布版(tag 含 alpha/beta/rc/pre 时)
gh release create "$TARGET_TAG" \
--title "$TARGET_TAG" \
--notes-file "$NOTES_FILE" \
--prerelease
# 清理临时文件
rm -f "$NOTES_FILE"
输出格式
完成发布后,向用户输出:
✅ Release 发布成功!
📍 Release URL: [release 链接]
🏷️ Tag: [tag 名称]
📅 发布时间: [时间]
📝 Release Notes 预览:
[生成的前 10 行 notes]
参考资源
- Release Notes 生成策略:references/release-notes-strategy.md
- Release Notes 示例模板:references/release-templates.md
- GitHub CLI 文档:https://cli.github.com/manual/gh_release_create
错误处理
| 场景 | 处理方式 |
|---|---|
gh 未安装 |
提示安装:brew install gh 或访问 https://cli.github.com |
gh 未认证 |
提示运行 gh auth login |
| Tag 不存在 | 提示用户可用的 tags 列表 |
| 网络请求失败 | 重试 3 次,仍失败则报错并给出手动创建指南 |
| 权限不足 | 提示检查 gh auth status 及仓库权限 |
| Release 已存在 | 询问用户是否覆盖(使用 gh release edit) |
实现注意事项
- 跨平台兼容:始终使用正斜杠
/处理路径 - Notes 转义:使用
--notes-file传递临时文件,避免 shell 特殊字符转义问题 - Git 远程解析:
gh repo view自动处理 HTTPS 和 SSH 两种 remote URL 格式 - 认证管理:
ghCLI 使用系统 keychain 或~/.config/gh/hosts.yml存储凭证,无需手动管理 token
More from huangwb8/skills
init-project
当用户明确要求"初始化项目"、"创建项目指令文件"或"生成 AGENTS.md"时使用。完全自动化:自动检测操作系统默认语言,分析项目目录结构(支持 Python/Web/Rust/Go/Java/数据科学/文档项目等),推断项目类型和用途,一键生成规范的项目指令文档。生成结果包括:AGENTS.md(跨平台通用项目指令,Single Source of Truth)、CLAUDE.md(Claude Code 特定适配,通过 @./AGENTS.md 引用)、README.md(项目介绍与使用方法)、CHANGELOG.md(项目变更记录)、.gitignore(Git 忽略规则,安全优先),并在完整初始化时自动补齐 `docs/` 与 `docs/plans/`。
9parallel-vibe
当用户明确要求"并行执行同一条 Vibe Coding 指令 / 多线程并行尝试多种方案 / 在多个独立工作区里同时推进"时使用。在用户当前工作目录创建 `.parallel_vibe/`,复制出多个独立工作区并按计划运行每个 thread 的 runner(默认串行、可选并行),最后在 `@main/summary.md` 汇总结果。⚠️ 不适用:用户只是想并行跑 shell 命令/单元测试/下载任务(应直接用并发工具或 CI)、没有明确"多工作区并行尝试/多方案对比"意图、要求强安全隔离或处理高度敏感数据(应使用容器/沙箱方案)。
7auto-test-skill
当用户明确要求"测试技能"、"运行 auto-test"或"进行批判性测试"时使用。通过多轮 A 轮批判性测试 + B 轮质量原则检查,系统化发现、记录、修复问题,并沉淀可追溯的 `plans/` 与 `tests/` 文档。⚠️ 不适用:用户只是想优化功能(应直接修改)、只是询问技能问题(应直接回答)、没有明确"测试"意图。
4auto-test-project
当用户明确要求"测试项目"、"运行 auto-test-project"或"进行项目级测试"时使用。对完整项目进行多轮 A 轮批判性测试 + B 轮质量检查,系统化发现、记录、修复问题。⚠️ 不适用:用户只是想优化功能(应直接修改)、只是询问项目问题(应直接回答)、没有明确"测试"意图。
4better-prompt
当用户明确要求"优化 prompt"、"改进提示词"、"润色指令"或"将简陋 prompt 转换为最佳实践版本"时使用。基于 OpenAI 和 Anthropic 官方最佳实践,对用户提供的简陋 prompt 进行结构化优化,输出符合社区标准的高质量版本。
3git-commit
当用户明确要求"提交 Git 改动"、"生成 commit 信息"或"创建 git commit"时使用。仅用 Git 分析改动并自动生成 conventional commit 信息(可选 emoji);必要时建议拆分提交,默认运行本地 Git 钩子(可 --no-verify 跳过),提交后默认自动 push(可 --no-push 跳过)。
3