Loading...
Loading...
Compare original and translation side by side
Purpose: Take a project from "code is ready" to "tagged and ready to push."
用途: 将项目从“代码已就绪”状态推进到“已打标签,可推送”状态。
/release 1.7.0 # full release: changelog + bump + commit + tag
/release 1.7.0 --dry-run # show what would happen, change nothing
/release --check # readiness validation only (GO/NO-GO)
/release # suggest version from commit analysis
/release 1.7.0 --no-gh-release # skip GitHub Release draft/release 1.7.0 # 完整发布流程:变更日志 + 版本升级 + 提交 + 打标签
/release 1.7.0 --dry-run # 模拟执行,仅展示操作内容,不实际修改
/release --check # 仅执行就绪性验证(通过/不通过)
/release # 通过提交分析建议版本号
/release 1.7.0 --no-gh-release # 跳过GitHub Release草稿创建| Argument | Required | Description |
|---|---|---|
| No | Semver string (e.g., |
| No | Readiness validation only — don't generate or write anything |
| No | Show generated changelog + version bumps without writing |
| No | Skip pre-flight validation (tests, lint) |
| No | Skip draft GitHub Release creation |
| No | Only update CHANGELOG.md — no version bumps, no commit, no tag |
| 参数 | 是否必填 | 描述 |
|---|---|---|
| 否 | Semver格式字符串(例如: |
| 否 | 仅执行就绪性验证 — 不生成或写入任何内容 |
| 否 | 展示生成的变更日志和版本升级内容,但不实际写入 |
| 否 | 跳过预飞验证(测试、代码检查) |
| 否 | 跳过GitHub Release草稿创建 |
| 否 | 仅更新CHANGELOG.md — 不升级版本号、不创建提交、不打标签 |
/release [version]/release [version]/release --check/vibe/release --check/vibe/release 1.7.0 --changelog-only/release 1.7.0 --changelog-onlygit rev-parse --git-dir # must be in a git repo
git status --porcelain # warn if dirty
git branch --show-current # show current branch| Check | How | Severity |
|---|---|---|
| Git repo | | Block — cannot proceed |
| CHANGELOG.md exists | Glob for changelog (case-insensitive) | Offer to create if missing |
Has | Read CHANGELOG.md | Warn |
| Working tree clean | | Warn (show dirty files) |
| On expected branch | | Warn if not main/master/release |
| Tests pass | Detect and run test command | Warn (show failures) |
| Lint clean | Detect and run lint command | Warn (show issues) |
| Version consistency | Compare versions across package files | Warn (show mismatches) |
| Commits since last tag | | Block if empty — nothing to release |
| File | Test Command | Lint Command |
|---|---|---|
| | |
| | |
| | |
| | |
| | |
--skip-checks--checkRelease Readiness: NO-GO
[PASS] Git repo
[PASS] CHANGELOG.md exists
[PASS] Working tree clean
[WARN] Branch: feature/foo (expected main)
[FAIL] Tests: 2 failures in auth_test.go
[PASS] Lint clean
[PASS] Version consistency (1.6.0 in all 2 files)
[PASS] 14 commits since v1.6.0--checkgit rev-parse --git-dir # 验证当前目录是否为git仓库
git status --porcelain # 若工作区未清理则发出警告
git branch --show-current # 显示当前分支| 检查项 | 实现方式 | 严重程度 |
|---|---|---|
| Git仓库验证 | | 阻塞 — 无法继续执行 |
| CHANGELOG.md存在验证 | 全局搜索变更日志文件(不区分大小写) | 若缺失则提示创建 |
存在 | 读取CHANGELOG.md内容 | 警告 |
| 工作区已清理 | | 警告(显示未提交文件) |
| 当前分支符合预期 | | 若不在main/master/release分支则警告 |
| 测试通过 | 自动检测并运行测试命令 | 警告(显示失败用例) |
| 代码检查通过 | 自动检测并运行代码检查命令 | 警告(显示问题) |
| 版本号一致性 | 对比各包文件中的版本号 | 警告(显示不一致项) |
| 上次标签后有新提交 | | 阻塞 — 无新提交则无需发布 |
| 存在文件 | 测试命令 | 代码检查命令 |
|---|---|---|
| | |
| | |
| | |
| | |
包含 | | |
--skip-checks--check发布就绪性:不通过
[通过] Git仓库验证
[通过] CHANGELOG.md已存在
[通过] 工作区已清理
[警告] 当前分支:feature/foo(预期为main分支)
[失败] 测试:auth_test.go中有2个失败用例
[通过] 代码检查通过
[通过] 版本号一致(所有2个文件中版本均为1.6.0)
[通过] 自v1.6.0以来有14个新提交--checkgit tag --sort=-version:refname -l 'v*' | head -1v*git rev-list --max-parents=0 HEAD<last-tag>..HEADgit tag --sort=-version:refname -l 'v*' | head -1v*git rev-list --max-parents=0 HEAD<last-tag>..HEADgit log --oneline --no-merges <range>
git log --format="%H %s" --no-merges <range>
git diff --stat <range>--onelinegit log --oneline --no-merges <range>
git log --format="%H %s" --no-merges <range>
git diff --stat <range>--oneline| Category | Signal |
|---|---|
| Added | New features, new files, "add", "create", "implement", "introduce", |
| Changed | Modifications, updates, refactors, "update", "refactor", "rename", "migrate" |
| Fixed | Bug fixes, corrections, "fix", "correct", "resolve", "patch" |
| Removed | Deletions, "remove", "delete", "drop", "deprecate" |
auth:api:feat(users)git show --stat <hash>### Removed--no-merges| 分类 | 识别关键词 |
|---|---|
| 新增 | 新功能、新文件、“add”、“create”、“implement”、“introduce”、 |
| 变更 | 修改、更新、重构、“update”、“refactor”、“rename”、“migrate” |
| 修复 | Bug修复、修正、“fix”、“correct”、“resolve”、“patch” |
| 移除 | 删除、“remove”、“delete”、“drop”、“deprecate” |
auth:api:feat(users)git show --stat <hash>### Removed--no-merges| Condition | Suggestion |
|---|---|
Any commit contains "BREAKING", "breaking change", or | Major bump |
| Any commits classified as Added (new features) | Minor bump |
| Only Fixed/Changed commits | Patch bump |
Suggested version: 1.7.0 (minor)
Reason: 3 new features added, no breaking changes
Current version: 1.6.0 (from package.json, go tags)| 条件 | 建议版本 |
|---|---|
任何提交包含“BREAKING”、“breaking change”或 | 主版本号升级 |
| 存在分类为“新增”的提交 | 次版本号升级 |
| 仅存在“修复”/“变更”类提交 | 修订号升级 |
建议版本:1.7.0(次版本号升级)
理由:新增3项功能,无破坏性变更
当前版本:1.6.0(来自package.json、go标签)undefinedundefined
Use today's date in `YYYY-MM-DD` format.
**Style adaptation:** Read the existing CHANGELOG entries and match their conventions:
- Bullet format (plain text vs bold names vs backtick names)
- Separator style (em-dash ` — `, hyphen ` - `, colon `: `)
- Grouping patterns (flat list vs sub-sections)
- Level of detail (terse vs verbose)
If no existing entries to reference (first release), use plain Keep a Changelog defaults.
使用`YYYY-MM-DD`格式的当前日期。
**风格适配:** 读取现有变更日志条目,匹配其约定:
- 项目符号格式(纯文本/加粗名称/反引号包裹名称)
- 分隔符样式(破折号` — `、连字符` - `、冒号`: `)
- 分组模式(扁平列表/子章节)
- 详细程度(简洁/详细)
若没有现有条目(首次发布),则使用Keep a Changelog的默认格式。| File | Pattern | Example |
|---|---|---|
| | |
| | |
| | |
| | |
| Plain version string | |
| Plain version string | |
| Version from ldflags (show, don't modify — goreleaser reads from git tags) | — |
Version strings detected:
package.json: "version": "1.6.0" → "1.7.0"
src/version.go: const Version = "1.6.0" → "1.7.0"
.goreleaser.yml: (reads from git tag — no change needed)| 文件 | 匹配模式 | 示例 |
|---|---|---|
| | |
| | |
| | |
| | |
| 纯版本号字符串 | |
| 纯版本号字符串 | |
| 从ldflags读取版本号(仅展示,不修改 — goreleaser从git标签读取版本) | — |
检测到版本号字符串:
package.json: "version": "1.6.0" → "1.7.0"
src/version.go: const Version = "1.6.0" → "1.7.0"
.goreleaser.yml: (从git标签读取 — 无需修改)--dry-run--dry-run## [Unreleased]## [## [Unreleased]## [Unreleased]## [## [Unreleased]git add CHANGELOG.md <version-files...>
git commit -m "Release v<version>"git add CHANGELOG.md <version-files...>
git commit -m "Release v<version>"git tag -a v<version> -m "Release v<version>"git tag -a v<version> -m "Release v<version>"undefinedundefined
**The All Changes section is NOT the CHANGELOG.** The CHANGELOG is for contributors who want file paths, issue IDs, and implementation detail. The release page condenses that into plain-English bullets a user can scan in 15 seconds. When in doubt, leave it out — the link is there for the curious.
**Condensing rules:**
- Remove issue IDs: `(ag-ab6)` → gone
- Remove file paths: `skills/council/scripts/validate-council.sh` → "council validation script"
- Remove internal terms: "progressive-disclosure reference files" → "reference content loaded on demand"
- Collapse related items: "5 broken links" + "7 doc inaccuracies" → "12 broken links and doc inaccuracies fixed"
- Bold sparingly: only in What's New section, not in All Changes
**Example:**
```markdown
**所有变更章节不是变更日志的复制。** 变更日志面向贡献者,包含文件路径、问题ID和实现细节;发布页面的内容是其精简版,用用户能在15秒内扫完的简单语言描述。拿不准的内容就删掉 — 好奇的用户可以通过链接查看详细内容。
**精简规则:**
- 移除问题ID:`(ag-ab6)` → 删除
- 移除文件路径:`skills/council/scripts/validate-council.sh` → “委员会验证脚本”
- 替换内部术语:“progressive-disclosure reference files” → “按需加载的参考内容”
- 合并相关项:“5个失效链接” + “7处文档错误” → “修复12个失效链接和文档错误”
- 谨慎使用加粗:仅在新增内容章节使用,所有变更章节不使用
**示例:**
```markdown/judge/council
**Always write release notes to a file immediately after generating:**
```bash
mkdir -p .agents/releases.agents/releases/YYYY-MM-DD-v<version>-notes.mdgh release create/judge/council
**生成后立即将发布说明写入文件:**
```bash
mkdir -p .agents/releases.agents/releases/YYYY-MM-DD-v<version>-notes.mdgh release create--no-gh-releaseghwhich ghgh release create v<version> --draft --title "v<version>" --notes-file .agents/releases/YYYY-MM-DD-v<version>-notes.mdgh release createTag not pushed yet. After pushing, create the release with:
gh release create v<version> --draft --title "v<version>" --notes-file .agents/releases/YYYY-MM-DD-v<version>-notes.mdgh release edit v<version> --draft=falsegh--no-gh-releaseghwhich ghgh release create v<version> --draft --title "v<version>" --notes-file .agents/releases/YYYY-MM-DD-v<version>-notes.mdgh release create标签尚未推送。推送后执行以下命令创建Release:
gh release create v<version> --draft --title "v<version>" --notes-file .agents/releases/YYYY-MM-DD-v<version>-notes.mdgh release edit v<version> --draft=falseghRelease v1.7.0 prepared locally.
Next steps:
git push origin main --tags # push commit + tag
Your CI will handle: build, validate, publish
(detected: .github/workflows/release.yml, .goreleaser.yml)Next steps:
git push origin main --tags # push commit + tag
gh release edit v1.7.0 --draft=false # publish the GitHub Release
No release CI detected. Consider adding a workflow for automated publishing.本地已完成v1.7.0版本的发布准备。
下一步:
git push origin main --tags # 推送提交和标签
你的CI将负责:构建、验证、发布
(已检测到:.github/workflows/release.yml, .goreleaser.yml)下一步:
git push origin main --tags # 推送提交和标签
gh release edit v1.7.0 --draft=false # 发布GitHub Release
未检测到发布CI。建议添加工作流实现自动化发布。mkdir -p .agents/releases.agents/releases/YYYY-MM-DD-v<version>-audit.mdundefinedmkdir -p .agents/releases.agents/releases/YYYY-MM-DD-v<version>-audit.mdundefined-notes.md| File | Audience | Contains |
|---|---|---|
| GitHub feed readers | Highlights, What's New, All Changes |
| Internal/flywheel | Version bumps, pre-flight results |
这是**内部**记录,用于知识积累。不会发布到GitHub Release页面 — 该页面使用步骤12中的`-notes.md`文件。
**两个文件,两个受众:**
| 文件 | 受众 | 内容 |
|------|----------|----------|
| `*-notes.md` | GitHub动态浏览者 | 亮点、新增内容、所有变更 |
| `*-audit.md` | 内部团队/知识积累 | 版本号升级记录、预飞检查结果 |
---CHANGELOG.mdundefinedundefined
Then proceed with the normal workflow to populate the first versioned entry.
---
然后继续执行正常工作流,填充第一个带版本号的条目。
-----no-gh-release--no-gh-releasenpm publishcargo publishtwine uploadgo buildnpm packdocker buildgit pushgit push --tagsgit reset HEAD~1git tag -d v<version>npm publishcargo publishtwine uploadgo buildnpm packdocker buildgit pushgit push --tagsgit reset HEAD~1git tag -d v<version>