mirror of
https://github.com/ILoveBingLu/CipherTalk.git
synced 2026-05-18 10:18:52 +08:00
chore: 配置 GitHub 自动发布流程
This commit is contained in:
+62
-298
@@ -1,327 +1,91 @@
|
||||
# 📦 自动发布脚本使用说明
|
||||
# 📦 发布说明
|
||||
|
||||
## 🚀 快速开始
|
||||
## 触发方式
|
||||
|
||||
### 发布新版本(3 步完成)
|
||||
当前仓库不再使用本地 `npm run tuisong` 发布。
|
||||
|
||||
正式发布方式改为:
|
||||
|
||||
1. 修改 `package.json` 中的版本号
|
||||
2. 提交代码并推送到 `main`
|
||||
3. 推送一个与版本号完全一致的 Git tag,例如:
|
||||
|
||||
```bash
|
||||
# 1. 修改 package.json 中的版本号
|
||||
# "version": "2.0.4"
|
||||
|
||||
# 2. 提交所有更改
|
||||
git add .
|
||||
git commit -m "release: v2.0.4"
|
||||
|
||||
# 3. 运行发布脚本
|
||||
npm run tuisong
|
||||
git tag v2.2.14
|
||||
git push origin v2.2.14
|
||||
```
|
||||
|
||||
就这么简单!脚本会自动:
|
||||
- ✅ 检查是否有未提交的更改(有则报错)
|
||||
- ✅ 读取 `package.json` 中的版本号
|
||||
- ✅ 推送到 GitHub
|
||||
- ✅ 创建并推送版本标签(如 `v2.0.4`)
|
||||
- ✅ 触发自动构建和发布
|
||||
只有推送 `v*` 标签时,GitHub Actions 才会自动构建和发布。
|
||||
|
||||
---
|
||||
## GitHub Actions 会做什么
|
||||
|
||||
## 📝 使用方法
|
||||
`.github/workflows/release.yml` 会在 `v*` 标签触发后执行:
|
||||
|
||||
```bash
|
||||
npm run tuisong
|
||||
```
|
||||
|
||||
**前提条件:**
|
||||
- ✅ 所有更改已提交(`git commit`)
|
||||
- ✅ `package.json` 中的版本号已更新
|
||||
|
||||
**脚本会做什么:**
|
||||
1. 检查是否有未提交的更改(有则退出)
|
||||
2. 显示待推送的提交
|
||||
3. 推送到 GitHub
|
||||
4. 创建版本标签(如 `v2.0.4`)
|
||||
5. 推送标签到 GitHub
|
||||
|
||||
---
|
||||
|
||||
## 🎯 完整发布流程
|
||||
|
||||
### 步骤 1:修改版本号
|
||||
|
||||
编辑 `package.json`:
|
||||
|
||||
```json
|
||||
{
|
||||
"name": "ciphertalk",
|
||||
"version": "2.0.4", // 修改这里
|
||||
...
|
||||
}
|
||||
```
|
||||
|
||||
**版本号规范:**
|
||||
- **patch (x.y.Z)** - 修复 bug:`2.0.3` → `2.0.4`
|
||||
- **minor (x.Y.z)** - 新增功能:`2.0.3` → `2.1.0`
|
||||
- **major (X.y.z)** - 重大更新:`2.0.3` → `3.0.0`
|
||||
|
||||
### 步骤 2:提交更改
|
||||
|
||||
```bash
|
||||
git add .
|
||||
git commit -m "release: v2.0.4"
|
||||
```
|
||||
|
||||
### 步骤 3:推送发布
|
||||
|
||||
```bash
|
||||
npm run tuisong
|
||||
```
|
||||
|
||||
脚本会显示:
|
||||
```
|
||||
================================
|
||||
密语 - 自动发布脚本
|
||||
================================
|
||||
|
||||
📌 当前版本: v2.0.4
|
||||
|
||||
📝 待推送的提交:
|
||||
abc1234 release: v2.0.4
|
||||
|
||||
[1/2] 🚀 推送到 GitHub...
|
||||
✓ 推送成功
|
||||
|
||||
[2/2] 🏷️ 创建并推送标签 v2.0.4...
|
||||
✓ 标签创建成功
|
||||
|
||||
================================
|
||||
✅ 发布流程已启动!
|
||||
================================
|
||||
|
||||
📦 版本: v2.0.4
|
||||
|
||||
🔗 查看构建进度:
|
||||
https://github.com/JiQingzhe2004/ciphertalk/actions
|
||||
|
||||
🔗 发布完成后访问:
|
||||
https://github.com/JiQingzhe2004/ciphertalk/releases/tag/v2.0.4
|
||||
|
||||
⏱️ 预计 10-15 分钟后构建完成
|
||||
```
|
||||
|
||||
### 步骤 4:等待构建完成
|
||||
|
||||
GitHub Actions 会自动:
|
||||
1. 安装依赖
|
||||
2. 重新编译原生模块
|
||||
3. 构建标准安装包
|
||||
4. 创建 GitHub Release
|
||||
5. 上传到 Cloudflare R2
|
||||
6. 上传 `CipherTalk-2.0.4-Setup.exe`
|
||||
3. 执行 `npm run build`
|
||||
4. 生成 `release/force-update.json`
|
||||
5. 创建/更新 GitHub Release
|
||||
6. 上传以下文件到 GitHub Release:
|
||||
- 安装包
|
||||
- `latest.yml`
|
||||
- `force-update.json`
|
||||
- 若存在则上传 `.blockmap`
|
||||
7. 将以下文件同步到 Cloudflare R2:
|
||||
- 安装包
|
||||
- `latest.yml`
|
||||
- `force-update.json`
|
||||
|
||||
---
|
||||
## 版本要求
|
||||
|
||||
## 🎨 使用场景示例
|
||||
标签名必须与 `package.json.version` 完全对应:
|
||||
|
||||
### 场景 1:修复 bug
|
||||
- `package.json.version = 2.2.14`
|
||||
- Git tag 必须是 `v2.2.14`
|
||||
|
||||
如果不一致,工作流会直接失败。
|
||||
|
||||
## 强制更新策略
|
||||
|
||||
工作流会调用:
|
||||
|
||||
```bash
|
||||
# 1. 修改代码
|
||||
# 2. 更新版本号: 2.0.3 → 2.0.4
|
||||
# 3. 提交
|
||||
git add .
|
||||
git commit -m "fix: 修复表情包显示问题"
|
||||
|
||||
# 4. 发布
|
||||
npm run tuisong
|
||||
npm run build:force-update-manifest
|
||||
```
|
||||
|
||||
### 场景 2:添加新功能
|
||||
默认情况下不会触发强制更新。只有在仓库 Variables / Secrets 中提供以下值时,生成的 `force-update.json` 才会带上对应策略:
|
||||
|
||||
```bash
|
||||
# 1. 开发新功能
|
||||
# 2. 更新版本号: 2.0.3 → 2.1.0
|
||||
# 3. 提交
|
||||
git add .
|
||||
git commit -m "feat: 添加语音转文字功能"
|
||||
- `FORCE_UPDATE_MIN_VERSION`
|
||||
- `FORCE_UPDATE_BLOCKED_VERSIONS`
|
||||
- `FORCE_UPDATE_TITLE`
|
||||
- `FORCE_UPDATE_MESSAGE`
|
||||
- `FORCE_UPDATE_RELEASE_NOTES`
|
||||
|
||||
# 4. 发布
|
||||
npm run tuisong
|
||||
```
|
||||
## Secrets / Variables
|
||||
|
||||
### 场景 3:重大更新
|
||||
### Cloudflare R2 Secrets
|
||||
|
||||
```bash
|
||||
# 1. 重构代码
|
||||
# 2. 更新版本号: 2.0.3 → 3.0.0
|
||||
# 3. 提交
|
||||
git add .
|
||||
git commit -m "feat!: 全新 UI 设计"
|
||||
需要在 GitHub 仓库配置以下 Secrets:
|
||||
|
||||
# 4. 发布
|
||||
npm run tuisong
|
||||
```
|
||||
- `R2_ACCOUNT_ID`
|
||||
- `R2_BUCKET_NAME`
|
||||
- `R2_ACCESS_KEY_ID`
|
||||
- `R2_SECRET_ACCESS_KEY`
|
||||
|
||||
---
|
||||
### 可选强制更新 Variables / Secrets
|
||||
|
||||
## 🔧 其他构建脚本
|
||||
可以按需配置:
|
||||
|
||||
### 完整构建(生产环境)
|
||||
- `FORCE_UPDATE_MIN_VERSION`
|
||||
- `FORCE_UPDATE_BLOCKED_VERSIONS`
|
||||
- `FORCE_UPDATE_TITLE`
|
||||
- `FORCE_UPDATE_MESSAGE`
|
||||
- `FORCE_UPDATE_RELEASE_NOTES`
|
||||
|
||||
```bash
|
||||
npm run build
|
||||
```
|
||||
不配置时,`force-update.json` 仍会生成,但只包含当前版本信息,不会强制用户升级。
|
||||
|
||||
包含:
|
||||
- ✅ 更新 README 版本号
|
||||
- ✅ TypeScript 编译
|
||||
- ✅ Vite 构建前端
|
||||
- ✅ Electron 打包
|
||||
- ✅ 更新 latest.yml
|
||||
## 当前更新源角色
|
||||
|
||||
---
|
||||
|
||||
## 🤖 GitHub Actions 自动化
|
||||
|
||||
推送到 `main` 分支时自动触发:
|
||||
|
||||
1. 📦 安装依赖
|
||||
2. 🔨 重新编译原生模块
|
||||
3. 🏗️ 构建应用程序(`npm run build`)
|
||||
4. 📊 获取版本号(从 `package.json`)
|
||||
5. 🎉 创建 GitHub Release(标签:`v2.0.4`)
|
||||
6. ☁️ 上传到 Cloudflare R2(自动删除旧版本)
|
||||
7. 📤 上传构建产物到 GitHub
|
||||
|
||||
**查看构建状态:**
|
||||
https://github.com/JiQingzhe2004/ciphertalk/actions
|
||||
|
||||
**查看发布版本:**
|
||||
https://github.com/JiQingzhe2004/ciphertalk/releases
|
||||
|
||||
---
|
||||
|
||||
## ⚙️ GitHub Secrets 配置
|
||||
|
||||
需要在 GitHub 仓库设置中配置以下 Secrets:
|
||||
|
||||
### Cloudflare R2 配置
|
||||
|
||||
1. 进入 GitHub 仓库 → Settings → Secrets and variables → Actions
|
||||
2. 点击 "New repository secret" 添加以下密钥:
|
||||
|
||||
| Secret 名称 | 说明 | 示例值 |
|
||||
|------------|------|--------|
|
||||
| `R2_ACCOUNT_ID` | R2 账户 ID | `bf9d655d15b24e8636ef9e61c137785b` |
|
||||
| `R2_BUCKET_NAME` | R2 存储桶名称 | `miyu` |
|
||||
| `R2_ACCESS_KEY_ID` | R2 访问密钥 ID | `3c49eaabd4b1a28f1d6a4eb642942ee7` |
|
||||
| `R2_SECRET_ACCESS_KEY` | R2 桶密访问密钥 | `••••••••••••••••••••••••••••••••` |
|
||||
|
||||
### 邮件通知配置(可选)
|
||||
|
||||
如果需要在构建完成后收到邮件通知,添加以下 Secrets:
|
||||
|
||||
| Secret 名称 | 说明 | 示例值 |
|
||||
|------------|------|--------|
|
||||
| `MAIL_USERNAME` | 发件邮箱(Gmail) | `your-email@gmail.com` |
|
||||
| `MAIL_PASSWORD` | Gmail 应用专用密码 | `abcd efgh ijkl mnop` |
|
||||
| `MAIL_TO` | 收件邮箱 | `your-email@gmail.com` |
|
||||
|
||||
**如何获取 Gmail 应用专用密码:**
|
||||
|
||||
1. 登录 [Google 账户](https://myaccount.google.com/)
|
||||
2. 进入 **安全性** → **两步验证**(需要先启用)
|
||||
3. 进入 **应用专用密码**
|
||||
4. 选择 **邮件** 和 **Windows 计算机**
|
||||
5. 点击 **生成**,复制 16 位密码(格式:`abcd efgh ijkl mnop`)
|
||||
6. 将密码添加到 GitHub Secrets 的 `MAIL_PASSWORD`
|
||||
|
||||
**邮件通知功能:**
|
||||
- ✅ 构建成功时发送邮件(包含下载链接)
|
||||
- ❌ 构建失败时发送邮件(包含错误日志链接)
|
||||
- 📧 邮件发送到你的 GitHub 注册邮箱(或指定邮箱)
|
||||
|
||||
### 如何获取 R2 凭证
|
||||
|
||||
从你的截图中可以看到:
|
||||
- **账户 ID**:在 Cloudflare R2 页面顶部显示
|
||||
- **存储桶名称**:你创建的存储桶名称
|
||||
- **访问密钥 ID**:在 R2 API 令牌页面显示
|
||||
- **桶密访问密钥**:创建 API 令牌时显示(只显示一次,需要保存)
|
||||
|
||||
### R2 上传规则
|
||||
|
||||
- ✅ 自动上传 `CipherTalk-{版本号}-Setup.exe`
|
||||
- ✅ 自动上传 `latest.yml`(用于自动更新)
|
||||
- ✅ 自动删除旧版本的安装包(保留最新版本)
|
||||
- ❌ 不上传 Core 版本(`*-Core-Setup.exe`)
|
||||
- ℹ️ 如果存储桶为空,跳过删除步骤
|
||||
|
||||
---
|
||||
|
||||
## 🔧 故障排查
|
||||
|
||||
### 问题 1:检测到未提交的更改
|
||||
|
||||
**错误:**
|
||||
```
|
||||
❌ 检测到未提交的更改:
|
||||
M package.json
|
||||
M src/App.tsx
|
||||
|
||||
请先提交所有更改后再运行此脚本
|
||||
```
|
||||
|
||||
**解决:**
|
||||
```bash
|
||||
# 提交所有更改
|
||||
git add .
|
||||
git commit -m "你的提交信息"
|
||||
|
||||
# 然后运行脚本
|
||||
npm run tuisong
|
||||
```
|
||||
|
||||
### 问题 2:推送失败
|
||||
|
||||
**错误:**
|
||||
```
|
||||
❌ 推送失败
|
||||
请检查网络连接和 Git 配置
|
||||
```
|
||||
|
||||
**解决:**
|
||||
- 检查网络连接
|
||||
- 检查 Git 配置
|
||||
- 确认 GitHub 账号已登录
|
||||
|
||||
### 问题 3:标签已存在
|
||||
|
||||
**提示:**
|
||||
```
|
||||
⚠️ 标签 v2.0.4 已存在,跳过创建
|
||||
```
|
||||
|
||||
**说明:**
|
||||
- 这是正常提示,不影响推送
|
||||
- 如果需要重新创建标签,先删除远程标签:
|
||||
```bash
|
||||
git push origin :refs/tags/v2.0.4
|
||||
git tag -d v2.0.4
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 💡 提示
|
||||
|
||||
1. **推送前先测试** - 确保代码可以正常运行
|
||||
2. **遵循版本号规范** - 便于版本管理([语义化版本](https://semver.org/lang/zh-CN/))
|
||||
3. **写清楚提交信息** - 方便用户了解更新内容
|
||||
4. **等待构建完成** - 大约 10-15 分钟
|
||||
|
||||
---
|
||||
|
||||
## 🔗 相关链接
|
||||
|
||||
- [GitHub Actions 工作流](../.github/workflows/build-release.yml)
|
||||
- [语义化版本规范](https://semver.org/lang/zh-CN/)
|
||||
- [Git 提交规范](https://www.conventionalcommits.org/zh-hans/)
|
||||
- **GitHub Release**:主更新源,负责安装包与 `latest.yml`
|
||||
- **Cloudflare R2**:镜像下载源 + 策略补充源
|
||||
- **force-update.json**:GitHub 优先,R2 回退
|
||||
|
||||
Reference in New Issue
Block a user