banner
yyh

Hi, I'm yyh

github
x
email

一次规范的 Tag Release 发布流程

一个我认可的 Tag Release 发布流程(带 CHANGELOG)#

这篇文章只是一个个人工程记录,目的是把版本发布这件事流程化、固定化,避免每次发布都临时发挥。

核心原则只有一句话:

发布相关的所有改动必须在一个 Release PR 中完成,
Tag 和 Release 只能发生在 PR 合并之后。


1. 创建 release 分支#

git checkout -b release/v0.1.0

每次发布都从独立的 release 分支开始。


2. 先更新 CHANGELOG.md#

CHANGELOG.md 中新增一个版本区块,整理本次发布的所有变更。

## [0.1.0] - YYYY-MM-DD

### Added
- ...

### Fixed
- ...

### Changed
- ...

CHANGELOG 是发布内容的唯一权威来源


3. 更新版本号#

修改 package.json 中的版本号(必要时同步 lockfile)。

{
  "version": "0.1.0"
}

此阶段 不创建 tag


4. 一次性提交所有发布准备#

git add CHANGELOG.md package.json package-lock.json
git commit -m "chore(release): prepare v0.1.0"

版本号和 CHANGELOG 必须同时提交,不能拆开。


5. 创建 Release PR#

git push -u origin release/v0.1.0
gh pr create \
  --title "chore(release): v0.1.0" \
  --body "Release preparation for v0.1.0"

Release PR 中只包含发布相关内容:

  • CHANGELOG 更新
  • 版本号更新
  • CI 校验结果

6. 合并 Release PR#

Review 完成后,将 Release PR 合并到 main

gh pr merge --merge

在此之前不允许打 tag。


7. 在 main 上创建 tag#

git checkout main
git pull origin main

git tag -a v0.1.0 -m "Release v0.1.0"
git push origin v0.1.0

Tag 指向的是已经被 review 和合并的最终状态。


8. 从 CHANGELOG 生成 GitHub Release#

发布 GitHub Release 时,直接使用 CHANGELOG 对应版本的内容。

gh release create v0.1.0 \
  --title "v0.1.0" \
  --notes-file <(extract_changelog_section v0.1.0)

不手写 Release Notes,避免与 CHANGELOG 不一致。


结语#

这个流程并不追求 “最快” 或 “最自动化”。

它的目标只有一个:
让发布这件事变成一套可重复、可回溯、不容易出错的固定动作。

加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。