254 lines
6.6 KiB
Markdown
254 lines
6.6 KiB
Markdown
# CI/CD 配置检查报告
|
|
|
|
## ✅ 检查完成
|
|
|
|
已完成对 GitHub Actions CI/CD 配置文件的全面检查。
|
|
|
|
---
|
|
|
|
## 📁 已创建的文件
|
|
|
|
| 文件 | 路径 | 说明 |
|
|
|------|------|------|
|
|
| build.yml | `.github/workflows/build.yml` | 主工作流配置文件 |
|
|
| README.md | `.github/workflows/README.md` | 详细配置说明文档 |
|
|
| QUICKSTART.md | `.github/workflows/QUICKSTART.md` | 快速入门指南 |
|
|
| setup-secrets.sh | `.github/workflows/setup-secrets.sh` | macOS/Linux 配置脚本 |
|
|
| setup-secrets.ps1 | `.github/workflows/setup-secrets.ps1` | Windows 配置脚本 |
|
|
|
|
---
|
|
|
|
## 🔧 已修复的问题
|
|
|
|
### 问题 1: iOS 签名身份 Secret 名称不一致
|
|
- **位置**: build.yml 第 218 行
|
|
- **问题**: 使用了 `IOS_SIGNING_identity` (小写 identity)
|
|
- **修复**: 改为 `IOS_SIGNING_IDENTITY` (全大写,符合命名规范)
|
|
|
|
### 问题 2: 条件判断过于复杂
|
|
- **位置**: 多处
|
|
- **问题**: 使用了 `startsWith(github.ref, 'refs/tags/v') || github.event.inputs.release_type == 'release'` 复杂条件
|
|
- **修复**: 简化为 `startsWith(github.ref, 'refs/tags/v')`,只在创建标签时触发 Release 构建
|
|
|
|
---
|
|
|
|
## ✅ 配置验证清单
|
|
|
|
### 工作流触发条件
|
|
- ✅ Push 到 main 分支 - 触发构建
|
|
- ✅ Push 到 develop 分支 - 触发 Debug 构建
|
|
- ✅ Pull Request - 触发 Debug 构建
|
|
- ✅ 创建版本标签 (v*) - 触发 Release 构建
|
|
- ✅ 手动触发 - 可选择构建平台和类型
|
|
|
|
### Android 构建步骤
|
|
- ✅ 检出代码和子模块
|
|
- ✅ 安装 JDK 11
|
|
- ✅ 安装 Go 1.23
|
|
- ✅ 安装 Android SDK
|
|
- ✅ 创建 local.properties
|
|
- ✅ 配置签名密钥 (Release)
|
|
- ✅ 构建 APK
|
|
- ✅ 上传构建产物
|
|
|
|
### iOS 构建步骤
|
|
- ✅ 检出代码和子模块
|
|
- ✅ 安装 Xcode 15.0
|
|
- ✅ 安装开发者证书 (Release)
|
|
- ✅ 安装 Provisioning Profile (Release)
|
|
- ✅ 解析 Swift Package 依赖
|
|
- ✅ 构建 Debug 版本 (模拟器)
|
|
- ✅ 构建并归档 Release 版本
|
|
- ✅ 导出 IPA
|
|
- ✅ 上传构建产物
|
|
|
|
### 发布步骤
|
|
- ✅ 下载 Android APK
|
|
- ✅ 下载 iOS IPA
|
|
- ✅ 创建 GitHub Release
|
|
- ✅ 上传文件到 Release
|
|
- ✅ 上传到 TestFlight (Beta 和正式版)
|
|
- ✅ 发送 Telegram 通知
|
|
- ✅ 清理旧的构建产物
|
|
|
|
---
|
|
|
|
## ⚠️ 使用前必须配置的 Secrets
|
|
|
|
### Android 构建 (发布版本必需)
|
|
|
|
| Secret 名称 | 说明 | 如何获取 |
|
|
|------------|------|---------|
|
|
| `ANDROID_KEYSTORE_BASE64` | 签名密钥库的 Base64 编码 | 使用 base64 命令转换 |
|
|
| `ANDROID_KEYSTORE_PASSWORD` | 密钥库密码 | 创建密钥库时设置 |
|
|
| `ANDROID_KEY_ALIAS` | 密钥别名 | 创建密钥库时设置 |
|
|
| `ANDROID_KEY_PASSWORD` | 密钥密码 | 创建密钥库时设置 |
|
|
|
|
**注意**: Debug 构建不需要配置这些 Secrets。
|
|
|
|
### iOS 构建 (发布版本必需)
|
|
|
|
| Secret 名称 | 说明 | 如何获取 |
|
|
|------------|------|---------|
|
|
| `IOS_CERTIFICATES_P12` | 开发者证书的 Base64 编码 | 从钥匙串导出 .p12 文件 |
|
|
| `IOS_CERTIFICATES_PASSWORD` | 证书密码 | 导出时设置 |
|
|
| `IOS_TEAM_ID` | Apple Team ID | Apple Developer 账号 |
|
|
| `IOS_SIGNING_IDENTITY` | 签名身份 | 如: "Apple Distribution: Name (TEAM_ID)" |
|
|
| `IOS_PROVISIONING_PROFILE` | Provisioning Profile 的 Base64 编码 | Apple Developer 网站下载 |
|
|
|
|
**注意**: Debug 构建不需要配置这些 Secrets。
|
|
|
|
### TestFlight 上传 (可选)
|
|
|
|
| Secret 名称 | 说明 | 如何获取 |
|
|
|------------|------|---------|
|
|
| `APP_STORE_CONNECT_ISSUER_ID` | Issuer ID | App Store Connect API Keys |
|
|
| `APP_STORE_CONNECT_API_KEY_ID` | API Key ID | 创建 API Key 时获得 |
|
|
| `APP_STORE_CONNECT_API_PRIVATE_KEY` | API 私钥 | 下载的 .p8 文件内容 |
|
|
|
|
### 通知 (可选)
|
|
|
|
| Secret 名称 | 说明 | 如何获取 |
|
|
|------------|------|---------|
|
|
| `TELEGRAM_BOT_TOKEN` | Bot Token | 通过 @BotFather 创建 |
|
|
| `TELEGRAM_CHAT_ID` | Chat ID | 邀请 Bot 后获取 |
|
|
|
|
---
|
|
|
|
## 🚀 快速开始步骤
|
|
|
|
### 1. 配置 Secrets
|
|
|
|
**Windows 用户**:
|
|
```powershell
|
|
cd D:\Code\UUVPN\.github\workflows
|
|
.\setup-secrets.ps1
|
|
```
|
|
|
|
**macOS/Linux 用户**:
|
|
```bash
|
|
cd /path/to/UUVPN/.github/workflows
|
|
chmod +x setup-secrets.sh
|
|
./setup-secrets.sh
|
|
```
|
|
|
|
### 2. 推送代码测试
|
|
|
|
```bash
|
|
# 推送到 develop 分支触发 Debug 构建
|
|
git checkout -b develop
|
|
git push origin develop
|
|
|
|
# 查看 Actions 页面确认构建成功
|
|
```
|
|
|
|
### 3. 创建发布版本
|
|
|
|
```bash
|
|
# 创建 Alpha 版本
|
|
git tag v1.0.0-alpha
|
|
git push origin v1.0.0-alpha
|
|
|
|
# 创建 Beta 版本 (会自动上传到 TestFlight)
|
|
git tag v1.0.0-beta
|
|
git push origin v1.0.0-beta
|
|
|
|
# 创建正式版本
|
|
git tag v1.0.0
|
|
git push origin v1.0.0
|
|
```
|
|
|
|
---
|
|
|
|
## 📊 预期行为
|
|
|
|
### Debug 构建 (develop 分支或 PR)
|
|
|
|
**Android**:
|
|
- ✅ 使用 Debug 签名
|
|
- ✅ 构建 `app-meta-alpha-debug.apk`
|
|
- ✅ 上传到 Artifacts (保留 30 天)
|
|
|
|
**iOS**:
|
|
- ✅ 无签名
|
|
- ✅ 构建模拟器版本
|
|
- ✅ 上传 .app 文件到 Artifacts (保留 7 天)
|
|
|
|
### Release 构建 (创建标签)
|
|
|
|
**Android**:
|
|
- ✅ 使用自定义签名密钥
|
|
- ✅ 构建 Release APK
|
|
- ✅ 重命名为 `UUVPN-Android-v1.0.0.apk`
|
|
- ✅ 上传到 GitHub Release
|
|
|
|
**iOS**:
|
|
- ✅ 使用开发者证书签名
|
|
- ✅ 导出 IPA 文件
|
|
- ✅ 重命名为 `UUVPN-iOS-v1.0.0.ipa`
|
|
- ✅ 上传到 GitHub Release
|
|
- ✅ Beta 和正式版上传到 TestFlight
|
|
|
|
---
|
|
|
|
## ⏱️ 预计构建时间
|
|
|
|
| 平台 | Debug 构建 | Release 构建 |
|
|
|------|-----------|-------------|
|
|
| Android | 5-10 分钟 | 10-15 分钟 |
|
|
| iOS | 15-20 分钟 | 20-30 分钟 |
|
|
|
|
**总计**: 完整构建约 25-45 分钟
|
|
|
|
---
|
|
|
|
## 💰 成本估算
|
|
|
|
GitHub Actions 免费账户每月 2000 分钟:
|
|
|
|
| 构建类型 | 消耗时间 | 每月可构建次数 |
|
|
|---------|---------|--------------|
|
|
| 仅 Android | ~10 分钟 | ~200 次 |
|
|
| 仅 iOS | ~200 分钟 (按 10 倍计) | ~10 次 |
|
|
| Android + iOS | ~210 分钟 | ~9 次 |
|
|
|
|
**建议**: 节省 macOS runner 时间,只在需要时构建 iOS 版本。
|
|
|
|
---
|
|
|
|
## 🎯 下一步行动
|
|
|
|
1. ✅ **配置 Secrets**
|
|
- 使用配置脚本或手动配置
|
|
- 至少配置 Debug 构建所需的 Secrets
|
|
|
|
2. ✅ **测试 Debug 构建**
|
|
- 推送代码到 develop 分支
|
|
- 确认构建成功
|
|
|
|
3. ✅ **配置发布 Secrets**
|
|
- 配置 Android 签名密钥
|
|
- 配置 iOS 证书和 Profile
|
|
|
|
4. ✅ **创建第一个版本**
|
|
- 创建标签触发 Release 构建
|
|
- 验证 GitHub Release 创建成功
|
|
|
|
5. ✅ **配置 TestFlight** (可选)
|
|
- 配置 App Store Connect API Keys
|
|
- 验证自动上传到 TestFlight
|
|
|
|
---
|
|
|
|
## 📞 获取帮助
|
|
|
|
如遇到问题,请查看:
|
|
|
|
1. [GitHub Actions 日志](https://github.com/你的用户名/UUVPN/actions)
|
|
2. [配置文档](.github/workflows/README.md)
|
|
3. [快速入门](.github/workflows/QUICKSTART.md)
|
|
4. [项目 Issues](https://github.com/nicolastinkl/UUVPN/issues)
|
|
|
|
---
|
|
|
|
**配置检查完成! 🎉** |