11# NamBlog 发布指南
22
3- ## 发布步骤
3+ ## 前置准备
4+
5+ ### Git 远程仓库配置
6+ ** 重要** :发布脚本要求 GitHub 远程仓库名称必须是 ` github ` (不是默认的 ` origin ` )。
7+
8+ 检查当前配置:
9+ ``` bash
10+ git remote -v
11+ ```
12+
13+ 如果远程仓库名是 ` origin ` ,需要重命名:
14+ ``` bash
15+ git remote rename origin github
16+ ```
17+
18+ 或添加新的远程仓库:
19+ ``` bash
20+ git remote add github https://github.com/your-username/namblog.git
21+ ```
22+
23+ ### 工作流说明
424
5- 1 . ** 代码推送到 GitHub** (至少默认分支 ` main ` ),确保仓库里已经存在:
6- - `.github/workflows/release.yml`
7- - `.github/workflows/ci.yml`
25+ 本项目有两个 GitHub Actions 工作流:
826
9- 2 . ** 推送Tag** 。
10- - 只 push 分支时,只会触发 `CI`(`ci.yml`)
11- - 只有 push 形如 `vX.Y.Z` 的 tag(例如 `v0.8.0`)才会触发 `Release and Build`(`release.yml`)
27+ | 工作流 | 文件 | 触发条件 | 作用 |
28+ | --------| ------| ---------| ------|
29+ | ** CI** | ` .github/workflows/ci.yml ` | 推送代码到 ` main ` /` develop ` 分支或创建 PR | ✅ 编译检查<br >✅ 构建测试 Docker 镜像<br >❌ 不发布 Release<br >❌ 不推送镜像到仓库 |
30+ | ** Release and Build** | ` .github/workflows/release.yml ` | 推送形如 ` v*.*.* ` 的 tag(如 ` v0.8.2 ` ) | ✅ 自动生成 Release Notes<br >✅ 创建 GitHub Release<br >✅ 构建多架构 Docker 镜像<br >✅ 推送到 GHCR |
1231
13- 3 . ** 确保 tag 指向的提交里包含 ` release.yml ` ** 。
14- - GitHub Actions 运行时会使用“tag 指向的那次提交”里的 workflow 文件 。
32+ ** CI 工作流 ** :用于日常开发,确保代码质量,每次推送代码都会运行。
33+ ** Release 工作流 ** :用于正式发布,只在推送版本标签时运行 。
1534
16- 4 . ** 仓库 Actions 权限设置** :
17- - 进入 GitHub 仓库 → Settings → Actions → General → Workflow permissions
18- - 建议选 **Read and write permissions**(否则即使 workflow 里写了 `contents: write` / `packages: write` 也可能受限)
35+ ### 首次手动发布(仅首次需要)
1936
20- 5 . ** GHCR 镜像包可见性** :
21- - 首次推送镜像成功后,Packages 里可能默认是 Private。
22- - 如果你希望“用户无需登录即可拉取”,需要把该 Package 的 Visibility 改为 **Public**。
37+ 如果是第一次设置发布流程,需要配置以下内容:
2338
39+ 1 . ** 确保仓库包含工作流文件** :
40+ - ` .github/workflows/release.yml `
41+ - ` .github/workflows/ci.yml `
42+
43+ 2 . ** 仓库 Actions 权限设置** :
44+ - 进入 GitHub 仓库 Settings Actions General Workflow permissions
45+ - 选择 ** Read and write permissions** (允许创建 Release 和推送 Packages)
46+
47+ 3 . ** GHCR 镜像包可见性设置** :
48+ - 首次推送镜像成功后,进入仓库 Packages
49+ - 找到 ` namblog ` 镜像包,点击 Package settings
50+ - 将 Visibility 改为 ** Public** (允许用户无需登录拉取镜像)
51+
52+ 4 . ** 创建首个 Release** :
53+ ``` bash
54+ # 使用脚本(推荐)
55+ .\D ocs-Tools\r elease.ps1 -Version " 0.8.0" -Message " Initial release"
56+
57+ # 或手动
58+ git tag -a v0.8.0 -m " Release v0.8.0"
59+ git push github v0.8.0
60+ ```
61+
62+ ## 发布步骤
63+
64+ ### 推荐方式:使用发布脚本(自动化)
65+
66+ ** 一键发布命令** :
2467``` bash
25- # 使用脚本(推荐)
26- .\r elease.ps1 -Version " 0.8.0" -Message " Initial release" # Windows
27- ./release.sh 0.8.0 " Initial release" # Linux/Mac
68+ # Windows PowerShell
69+ .\D ocs-Tools\r elease.ps1 -Version " 0.8.3" -Message " Bug fixes and improvements"
2870
29- # 或手动
30- git tag -a v0.8.0 -m " Release v0.8.0"
31- git push github v0.8.0
71+ # Linux/Mac Bash
72+ ./Docs-Tools/release.sh 0.8.3 " Bug fixes and improvements"
3273```
3374
34- GitHub Actions 自动执行:创建 Release、构建 Docker 镜像(amd64/arm64)、推送到 GHCR。
35-
75+ ** 脚本自动化功能** (一条命令完成以下所有步骤):
76+ 1 . 检查工作区状态(未提交更改会警告)
77+ 2 . 检查当前分支(非主分支会警告)
78+ 3 . 验证版本号格式(MAJOR.MINOR.PATCH)
79+ 4 . 检查 tag 是否已存在(避免重复发布)
80+ 5 . 自动更新 ` NamBlog.API.csproj ` 中的版本号
81+ 6 . 提示确认 ` CHANGELOG.md ` 已更新
82+ 7 . 提交版本更改到 Git
83+ 8 . 推送代码到 GitHub
84+ 9 . 创建并推送版本 tag(触发 Release 工作流)
85+ 10 . 显示 GitHub Actions 和 Release 链接
86+
87+ ** 发布前准备** :
88+ 1 . 在 ` CHANGELOG.md ` 中添加新版本的更新说明(中文)
89+ 2 . 确保所有代码已提交(脚本会检查)
90+
91+ ** Release Notes 生成策略** :
92+ - ** 中文内容** :从 ` CHANGELOG.md ` 自动提取当前版本的更新说明(手动维护,更详细)
93+ - ** 英文内容** :从 git commit 消息自动生成(Auto-generated,面向开发者)
94+ - ** 双语支持** :方便不同语言用户通过 Atom/RSS 订阅查看更新
95+
96+ 推送 tag 后,GitHub Actions 自动执行:创建双语 Release、构建多架构 Docker 镜像(amd64/arm64)、推送到 GHCR。
97+
98+ ---
99+
100+ ### 手动发布(不使用脚本)
101+
102+ 如果不使用脚本,需要手动执行以下步骤:
103+
104+ 1 . ** 更新 CHANGELOG.md** (添加新版本说明)
105+ 2 . ** 更新 .csproj 版本号** (修改 ` <Version>0.8.3</Version> ` )
106+ 3 . ** 提交并推送更改** :
107+ ``` bash
108+ git add CHANGELOG.md NamBlog.API/NamBlog.API.csproj
109+ git commit -m " chore: bump version to 0.8.3"
110+ git push github main
111+ ```
112+ 4 . ** 创建并推送 tag** :
113+ ``` bash
114+ git tag -a v0.8.3 -m " Release v0.8.3"
115+ git push github v0.8.3
116+ ```
117+
118+ 推送 tag 后,GitHub Actions 会自动触发发布流程。
119+
120+ ---
36121## 常见问题:为什么只看到 CI 成功,但没有 Release 和镜像?
37122
38123这通常意味着只 push 了分支提交(触发 ` CI ` ),但** 没有 push tag** (不会触发 ` release.yml ` )。
@@ -61,29 +146,22 @@ GitHub Actions 自动执行:创建 Release、构建 Docker 镜像(amd64/arm6
61146- ` 0.8 ` - 追踪 0.8.x 所有版本
62147- ` 0.8.0 ` - 精确版本,永不变
63148
64- ## 使用建议
149+ ## Docker 镜像使用建议
65150
66151``` yaml
67- # 生产 (推荐)
152+ # 生产环境 (推荐)
68153image : ghcr.io/code-gal/namblog:stable
69154
70- # 生产 (保守)
155+ # 生产环境 (保守)
71156image : ghcr.io/code-gal/namblog:0.8.0
72157
73- # 测试
158+ # 测试环境
74159image : ghcr.io/code-gal/namblog:1
75160
76- # 开发
161+ # 开发环境
77162image : ghcr.io/code-gal/namblog:latest
78163` ` `
79164
80- ## 语义化版本
81-
82- **MAJOR.MINOR.PATCH**
83- - MAJOR: 不兼容的 API 变更
84- - MINOR: 新功能(兼容)
85- - PATCH: Bug 修复
86-
87165## 版本回滚
88166
89167` ` ` bash
@@ -93,3 +171,4 @@ git push github :refs/tags/v0.8.1
93171
94172# 在 GitHub 删除 Release
95173```
174+
0 commit comments