Skip to content

GitHub Actions 工作流说明

本目录包含所有 GitHub Actions 自动化工作流配置。

📋 工作流列表

1. 🐳 Build and Push Docker Image (build-docker.yml)

用途:构建多架构 Docker 镜像并推送到 GitHub Container Registry

触发条件

  • 推送以 v 开头的版本标签(如 v1.0.0
  • 手动触发

功能

  • 构建支持 linux/amd64linux/arm64 的多架构镜像
  • 推送到 ghcr.io/<username>/imagine-server
  • 自动生成多个标签:
    • v1.2.3 - 完整版本号
    • 1.2 - 主次版本号
    • 1 - 主版本号
    • latest - 最新版本(仅正式版本)
  • 使用 GitHub Actions 缓存加速构建
  • 生成构建证明(attestation)

所需权限

  • contents: read - 读取仓库内容
  • packages: write - 推送到 GHCR

使用的 Secrets

  • GITHUB_TOKEN - 自动提供,无需配置

2. ☁️ Deploy to Cloudflare Workers (deploy-cloudflare.yml)

用途:自动部署到 Cloudflare Workers

触发条件

  • 推送以 v 开头的版本标签(如 v1.0.0
  • 手动触发

功能

  • 安装依赖(pnpm)
  • 构建 TypeScript 项目
  • 部署到 Cloudflare Workers
  • 自动设置环境变量和 Secrets

所需 Secrets

  • CLOUDFLARE_API_TOKEN - Cloudflare API Token
  • CLOUDFLARE_ACCOUNT_ID - Cloudflare Account ID
  • API_TOKEN - 应用 API 访问令牌
  • HUGGINGFACE_TOKENS - Hugging Face API Tokens
  • GITEE_TOKENS - Gitee AI API Tokens
  • MODELSCOPE_TOKENS - ModelScope API Tokens

前置要求

  • wrangler.toml 中配置 KV Namespace IDs

3. ▲ Deploy to Vercel (deploy-vercel.yml)

用途:自动部署到 Vercel

触发条件

  • 推送以 v 开头的版本标签(如 v1.0.0
  • 手动触发

功能

  • 安装依赖(pnpm)
  • 构建 TypeScript 项目
  • 部署到 Vercel 生产环境

所需 Secrets

  • VERCEL_TOKEN - Vercel API Token
  • VERCEL_ORG_ID - Vercel Organization ID
  • VERCEL_PROJECT_ID - Vercel Project ID

前置要求

  • 在 Vercel Dashboard 中配置环境变量

4. 📚 Deploy VitePress site to Pages (deploy-docs.yml)

用途:构建并部署文档站点到 GitHub Pages

触发条件

  • 推送到 main 分支
  • 手动触发

功能

  • 构建 VitePress 文档站点
  • 部署到 GitHub Pages

所需权限

  • contents: read - 读取仓库内容
  • pages: write - 写入 GitHub Pages
  • id-token: write - 生成部署令牌

所需 Secrets

  • 无(使用 GITHUB_TOKEN

前置要求

  • 在仓库设置中启用 GitHub Pages
  • 设置 Source 为 "GitHub Actions"

5. 🔍 Check Deployment Secrets (check-secrets.yml)

用途:验证部署所需的 Secrets 是否正确配置

触发条件

  • 仅手动触发

功能

  • 检查 Cloudflare 相关 Secrets
  • 检查 Vercel 相关 Secrets
  • 检查应用配置 Secrets
  • 提供清晰的检查结果

使用方法

  1. 进入 Actions 标签页
  2. 选择 Check Deployment Secrets
  3. 点击 Run workflow
  4. 查看运行结果

🚀 使用指南

发布新版本

bash
# 方法 1: 使用发布脚本(推荐)
./scripts/release.sh 1.0.0

# 方法 2: 手动创建标签
git tag v1.0.0
git push origin v1.0.0

推送标签后,以下工作流会自动运行:

  • Build and Push Docker Image
  • Deploy to Cloudflare Workers
  • Deploy to Vercel

手动触发部署

  1. 进入 GitHub 仓库的 Actions 标签页
  2. 选择要运行的工作流
  3. 点击 Run workflow
  4. 选择分支(通常是 main
  5. 点击 Run workflow 按钮

查看部署状态

  1. 进入 Actions 标签页
  2. 查看最近的工作流运行
  3. 点击工作流查看详细日志
  4. 绿色勾号表示成功,红色叉号表示失败

验证 Secrets 配置

bash
# 在 Actions 标签页手动运行
Check Deployment Secrets

查看输出,确认所有必需的 Secrets 都已设置。


🔧 配置指南

首次配置

  1. 配置 GitHub Secrets

    • 进入 SettingsSecrets and variablesActions
    • 添加所需的 Secrets(参考各工作流说明)
  2. 配置 Cloudflare

    • 创建 KV Namespaces
    • 更新 wrangler.toml
  3. 配置 Vercel

    • 创建项目
    • 配置环境变量
    • 获取 Organization ID 和 Project ID
  4. 启用 GitHub Pages

    • 进入 SettingsPages
    • Source 选择 "GitHub Actions"
  5. 验证配置

    • 运行 Check Deployment Secrets 工作流
    • 手动触发一次部署测试

详细配置步骤请查看:


📊 工作流依赖关系

版本标签推送 (v1.0.0)
    ├── Build and Push Docker Image
    │   └── 推送到 ghcr.io
    ├── Deploy to Cloudflare Workers
    │   └── 部署到 Cloudflare
    └── Deploy to Vercel
        └── 部署到 Vercel

代码推送到 main 分支
    └── Deploy VitePress site to Pages
        └── 部署文档到 GitHub Pages

🐛 故障排查

Docker 构建失败

可能原因

  • Dockerfile 语法错误
  • 依赖安装失败
  • 构建超时

解决方法

  1. 检查 docker/Dockerfile 语法
  2. 本地测试构建:docker build -f docker/Dockerfile .
  3. 查看 Actions 日志获取详细错误信息

Cloudflare 部署失败

可能原因

  • API Token 无效或权限不足
  • Account ID 错误
  • KV Namespace 未配置

解决方法

  1. 验证 CLOUDFLARE_API_TOKENCLOUDFLARE_ACCOUNT_ID
  2. 检查 wrangler.toml 中的 KV Namespace IDs
  3. 本地测试:pnpm run wrangler:deploy

Vercel 部署失败

可能原因

  • Token 无效
  • Organization ID 或 Project ID 错误
  • 环境变量未配置

解决方法

  1. 验证 VERCEL_TOKENVERCEL_ORG_IDVERCEL_PROJECT_ID
  2. 检查 Vercel Dashboard 中的环境变量
  3. 本地测试:pnpm run vercel:deploy

Secrets 未设置

解决方法

  1. 运行 Check Deployment Secrets 工作流
  2. 根据输出添加缺失的 Secrets
  3. 重新触发失败的工作流

📚 相关文档


🔐 安全注意事项

  1. 不要在工作流文件中硬编码敏感信息
  2. 使用 GitHub Secrets 管理所有敏感数据
  3. 定期轮换 API Tokens
  4. 使用最小权限原则配置 Tokens
  5. 审查工作流日志,确保没有泄露敏感信息
  6. 不要在公开仓库中暴露私有配置

💡 最佳实践

  1. 版本标签:使用语义化版本(v1.0.0)
  2. 测试后发布:确保本地测试通过后再推送标签
  3. 监控部署:推送标签后检查 Actions 运行状态
  4. 保持文档更新:更新 CHANGELOG 和相关文档
  5. 使用发布脚本:使用 scripts/release.sh 自动化发布流程
  6. 验证部署:部署后测试关键功能
  7. 准备回滚:了解如何快速回滚到之前的版本

🆘 获取帮助

如果遇到问题:

  1. 查看 故障排查 部分
  2. 检查 Actions 日志获取详细错误信息
  3. 查阅相关文档
  4. 在 GitHub Issues 中提问
  5. 查看 GitHub Actions 官方文档

最后更新:2025-12-30


🆕 新增工作流

Create GitHub Release

文件.github/workflows/create-release.yml

自动从 docs/CHANGELOG.md 提取发布说明并创建 GitHub Release。

触发条件

  • 推送以 v 开头的版本标签
  • 手动触发

功能

  • 自动读取 CHANGELOG.md 中对应版本的更新内容
  • 创建 GitHub Release
  • 设置 Release 标题和描述

使用方法

确保 docs/CHANGELOG.md 遵循 Keep a Changelog 格式:

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

### Added

- 新功能 A
- 新功能 B

### Changed

- 改进 C

### Fixed

- 修复 D

推送标签后自动创建 Release:

bash
git tag v1.0.0
git push origin v1.0.0

📦 本地打包

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

bash
# 构建发布包
pnpm run package

# 生成的文件
# - release/ 目录包含所有文件
# - imagine-server-v{version}-{platform}-{arch}.tar.gz 或 .zip

本地打包脚本会:

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

测试发布包:

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

🔄 完整的发布流程

推送版本标签后,以下工作流会自动运行:

推送版本标签 (v1.0.0)

    ├─→ Create GitHub Release
    │   └─ 从 CHANGELOG.md 创建 Release

    ├─→ Build Release Assets
    │   ├─ 构建 Linux x64 包
    │   ├─ 构建 Linux arm64 包
    │   ├─ 构建 macOS x64 包
    │   ├─ 构建 macOS arm64 包
    │   ├─ 构建 Windows x64 包
    │   └─ 上传到 GitHub Release

    ├─→ Build and Push Docker Image
    │   └─ 推送到 ghcr.io

    ├─→ Deploy to Cloudflare Workers
    │   └─ 部署到 Cloudflare

    └─→ Deploy to Vercel
        └─ 部署到 Vercel

所有工作流并行运行,互不影响。


最后更新:2025-12-30

Released under the MIT License.