Skip to content

版本发布指南 ​

本指南说明如何发布新版本并触发自动部署。

版本号规范 ​

本项目遵循 语义化版本 规范:

v<major>.<minor>.<patch>[-prerelease]
  • major(主版本号):不兼容的 API 修改
  • minor(次版本号):向下兼容的功能性新增
  • patch(修订号):向下兼容的问题修正
  • prerelease(预发布版本):可选,如 alpha, beta, rc.1

示例 ​

  • v1.0.0 - 正式版本
  • v1.1.0 - 新增功能
  • v1.1.1 - 修复 bug
  • v2.0.0 - 重大更新(不兼容)
  • v1.2.0-beta.1 - Beta 测试版本
  • v2.0.0-rc.1 - Release Candidate

发布流程 ​

1. 准备发布 ​

更新版本号 ​

编辑 package.json:

json
{
  "version": "1.1.0"
}

更新 CHANGELOG ​

编辑 docs/CHANGELOG.md,添加新版本的更新内容:

markdown
## [1.1.0] - 2025-12-30

### Added

- 新增 XXX 功能
- 支持 YYY 特性

### Changed

- 优化 ZZZ 性能
- 改进 AAA 体验

### Fixed

- 修复 BBB 问题
- 解决 CCC 错误

### Deprecated

- 废弃 DDD 方法(将在 v2.0.0 移除)

更新文档 ​

确保所有文档都是最新的:

  • README.md
  • API 文档
  • 部署指南
  • 配置说明

2. 提交更改 ​

bash
# 查看更改
git status

# 添加所有更改
git add .

# 提交(使用清晰的提交信息)
git commit -m "chore: prepare release v1.1.0"

# 推送到远程仓库
git push origin main

3. 创建版本标签 ​

bash
# 创建带注释的标签(推荐)
git tag -a v1.1.0 -m "Release version 1.1.0

- 新增 XXX 功能
- 优化 YYY 性能
- 修复 ZZZ 问题
"

# 或创建轻量标签
git tag v1.1.0

# 查看标签
git tag -l

# 查看标签详情
git show v1.1.0

4. 推送标签 ​

bash
# 推送单个标签
git push origin v1.1.0

# 或推送所有标签
git push origin --tags

5. 自动部署 ​

推送标签后,GitHub Actions 会自动触发以下工作流:

  1. Create GitHub Release

    • 从 docs/CHANGELOG.md 提取发布说明
    • 创建 GitHub Release
  2. Build Release Assets

    • 构建多平台 Node.js 发布包
    • 上传到 GitHub Release
  3. Build and Push Docker Image

    • 构建多架构 Docker 镜像
    • 推送到 ghcr.io
    • 生成标签:v1.1.0, 1.1, 1, latest
  4. Deploy to Cloudflare Workers

    • 构建项目
    • 部署到 Cloudflare Workers
  5. Deploy to Vercel

    • 构建项目
    • 部署到 Vercel

6. 监控部署 ​

  1. 进入 GitHub 仓库的 Actions 标签页
  2. 查看工作流运行状态
  3. 检查是否有错误或警告
  4. 等待所有工作流完成

7. 验证部署 ​

验证 GitHub Release ​

  1. 进入 GitHub 仓库的 Releases 页面
  2. 确认新版本的 Release 已创建
  3. 检查 Release 说明是否正确
  4. 确认发布包已上传:
    • imagine-server-linux-x64.tar.gz
    • imagine-server-linux-arm64.tar.gz
    • imagine-server-darwin-x64.tar.gz
    • imagine-server-darwin-arm64.tar.gz
    • imagine-server-win32-x64.zip

验证 Docker 镜像 ​

bash
# 拉取镜像
docker pull ghcr.io/<your-username>/imagine-server:v1.1.0

# 运行容器
docker run -d -p 3000:3000 \
  --env-file .env \
  ghcr.io/<your-username>/imagine-server:v1.1.0

# 测试 API
curl http://localhost:3000/api/health

验证 Cloudflare Workers ​

bash
# 访问你的 Cloudflare Workers URL
curl https://your-worker.workers.dev/api/health

# 查看部署日志
pnpm run wrangler:tail

验证 Vercel ​

bash
# 访问你的 Vercel URL
curl https://your-project.vercel.app/api/health

8. 创建 GitHub Release ​

GitHub Release 会自动创建,但你也可以手动编辑:

  1. 进入 GitHub 仓库的 Releases 页面
  2. 找到自动创建的 Release
  3. 点击 Edit release
  4. 可以添加额外的说明或附件
  5. 如果是预发布版本,勾选 This is a pre-release
  6. 点击 Update release

📦 本地打包 ​

除了 GitHub Actions 自动构建,你也可以在本地创建发布包:

bash
# 构建发布包
pnpm run package

这会:

  1. 构建 TypeScript 代码
  2. 安装生产依赖
  3. 复制必要文件
  4. 创建启动脚本
  5. 生成压缩包

生成的文件:

  • release/ - 发布目录
  • imagine-server-v{version}-{platform}-{arch}.tar.gz 或 .zip - 压缩包

测试发布包:

bash
cd release
cp .env.example .env
# 编辑 .env 配置
./start.sh  # 或 start.bat (Windows)

快速发布脚本 ​

创建一个发布脚本 scripts/release.sh:

bash
#!/bin/bash

# 检查参数
if [ -z "$1" ]; then
  echo "Usage: ./scripts/release.sh <version>"
  echo "Example: ./scripts/release.sh 1.1.0"
  exit 1
fi

VERSION=$1
TAG="v${VERSION}"

echo "🚀 Preparing release ${TAG}..."

# 更新 package.json 版本号
echo "📝 Updating package.json..."
npm version ${VERSION} --no-git-tag-version

# 提交更改
echo "💾 Committing changes..."
git add package.json
git commit -m "chore: bump version to ${VERSION}"

# 推送到远程
echo "⬆️  Pushing to remote..."
git push origin main

# 创建标签
echo "🏷️  Creating tag ${TAG}..."
git tag -a ${TAG} -m "Release version ${VERSION}"

# 推送标签
echo "⬆️  Pushing tag..."
git push origin ${TAG}

echo "✅ Release ${TAG} created successfully!"
echo "📦 GitHub Actions will now build and deploy automatically."
echo "🔗 Check progress at: https://github.com/$(git config --get remote.origin.url | sed 's/.*github.com[:/]\(.*\)\.git/\1/')/actions"

使用方法:

bash
# 赋予执行权限
chmod +x scripts/release.sh

# 发布新版本
./scripts/release.sh 1.1.0

回滚版本 ​

如果发现问题需要回滚:

1. 删除错误的标签 ​

bash
# 删除本地标签
git tag -d v1.1.0

# 删除远程标签
git push origin :refs/tags/v1.1.0

2. 回滚部署 ​

Cloudflare Workers ​

bash
# 查看部署历史
pnpm run wrangler deployments list

# 回滚到指定版本
pnpm run wrangler rollback [deployment-id]

Vercel ​

  1. 进入 Vercel Dashboard
  2. 选择项目 → Deployments
  3. 找到之前的稳定版本
  4. 点击 ... → Promote to Production

Docker ​

bash
# 使用之前的版本
docker pull ghcr.io/<your-username>/imagine-server:v1.0.0
docker stop imagine-server
docker rm imagine-server
docker run -d -p 3000:3000 \
  --env-file .env \
  ghcr.io/<your-username>/imagine-server:v1.0.0

3. 创建修复版本 ​

bash
# 修复问题后,发布修订版本
git tag v1.1.1
git push origin v1.1.1

预发布版本 ​

用于测试新功能,不会影响生产环境:

bash
# 创建 beta 版本
git tag v1.2.0-beta.1
git push origin v1.2.0-beta.1

# 创建 rc 版本
git tag v1.2.0-rc.1
git push origin v1.2.0-rc.1

预发布版本的 Docker 镜像标签:

  • ghcr.io/<username>/imagine-server:v1.2.0-beta.1
  • ghcr.io/<username>/imagine-server:1.2.0-beta.1

注意:预发布版本不会更新 latest 标签。

最佳实践 ​

  1. 遵循语义化版本:让用户清楚了解更新的影响
  2. 维护 CHANGELOG:记录每个版本的变更
  3. 测试后再发布:确保所有测试通过
  4. 使用带注释的标签:提供版本说明
  5. 创建 GitHub Release:方便用户查看和下载
  6. 监控部署状态:确保部署成功
  7. 验证功能:发布后测试关键功能
  8. 准备回滚方案:出问题时快速恢复

版本发布检查清单 ​

发布前检查:

  • [ ] 所有测试通过
  • [ ] 更新 package.json 版本号
  • [ ] 更新 CHANGELOG.md
  • [ ] 更新相关文档
  • [ ] 提交所有更改
  • [ ] 创建版本标签
  • [ ] 推送标签到远程

发布后验证:

  • [ ] GitHub Actions 工作流全部成功
  • [ ] Docker 镜像可以正常拉取和运行
  • [ ] Cloudflare Workers 部署成功
  • [ ] Vercel 部署成功
  • [ ] API 功能正常
  • [ ] 创建 GitHub Release
  • [ ] 通知用户(如有必要)

相关资源 ​

Released under the MIT License.