posted in EchoFlow 

📋 目录


🌳 分支策略

主要分支

分支名 用途 自动部署 保护级别
main 生产环境代码 ✅ Production 🔒 高度保护
develop 开发环境代码 ✅ Staging 🛡️ 基本保护
feature/* 功能开发分支 📝 无保护
hotfix/* 紧急修复分支 📝 无保护
release/* 发布准备分支 📝 无保护

分支规则

gitgraph
    commit id: "Initial"
    branch develop
    checkout develop
    commit id: "Dev Setup"

    branch feature/user-auth
    checkout feature/user-auth
    commit id: "Add login"
    commit id: "Add signup"

    checkout develop
    merge feature/user-auth
    commit id: "Merge auth"

    branch release/v1.0.0
    checkout release/v1.0.0
    commit id: "Version bump"
    commit id: "Update docs"

    checkout main
    merge release/v1.0.0
    commit id: "Release v1.0.0"

    checkout develop
    merge main

🔄 开发流程

1. 新功能开发

# 1. 从 develop 创建功能分支
git checkout develop
git pull origin develop
git checkout -b feature/audio-enhancement

# 2. 开发功能
# ... 代码开发 ...

# 3. 提交代码(遵循提交规范)
git add .
git commit -m "feat(audio): add real-time audio enhancement

- Implement WebRTC audio processing
- Add noise cancellation algorithm
- Optimize for low-latency streaming

Closes #123"

# 4. 推送并创建 Pull Request
git push origin feature/audio-enhancement
# 在 GitHub 上创建 PR: feature/audio-enhancement → develop

2. 紧急修复(Hotfix)

# 1. 从 main 创建 hotfix 分支
git checkout main
git pull origin main
git checkout -b hotfix/critical-auth-bug

# 2. 修复问题
# ... 代码修复 ...

# 3. 提交修复
git add .
git commit -m "fix(auth): resolve critical login vulnerability

- Fix SQL injection in user authentication
- Add input validation for login parameters
- Update security tests

Fixes #456
BREAKING CHANGE: Updated authentication API requires new client integration"

# 4. 推送并创建 PR
git push origin hotfix/critical-auth-bug
# 创建两个 PR:
# - hotfix/critical-auth-bug → main (紧急生产修复)
# - hotfix/critical-auth-bug → develop (同步到开发分支)

3. 发布流程

# 1. 从 develop 创建 release 分支
git checkout develop
git pull origin develop
git checkout -b release/v1.2.0

# 2. 准备发布
# - 更新版本号
# - 更新 CHANGELOG.md
# - 运行测试
# - 更新文档

# 3. 提交发布准备
git add .
git commit -m "chore(release): prepare v1.2.0

- Update version to 1.2.0
- Update CHANGELOG.md
- Update API documentation"

# 4. 合并到 main
# 创建 PR: release/v1.2.0 → main
# 合并后自动部署到生产环境

# 5. 同步回 develop
# 创建 PR: main → develop

📝 提交规范(Conventional Commits)

提交格式

<type>(<scope>): <subject>

<body>

<footer>

Type 类型

Type 说明 示例
feat 新功能 feat(audio): add voice command support
fix Bug 修复 fix(auth): resolve login timeout issue
docs 文档更新 docs(api): update authentication guide
style 代码格式 style(frontend): fix linting errors
refactor 代码重构 refactor(backend): simplify user service
perf 性能优化 perf(audio): optimize transcription speed
test 测试相关 test(auth): add unit tests for login flow
chore 构建/工具 chore(deps): update dependencies
ci CI/CD 配置 ci(github): add staging deployment
revert 代码回滚 revert: feat(audio): remove broken feature

Scope 范围

  • frontend - iOS 前端相关
  • backend - NestJS 后端相关
  • audio - 音频处理相关
  • auth - 认证授权相关
  • api - API 接口相关
  • db - 数据库相关
  • docs - 文档相关
  • deps - 依赖管理

特殊标记

# 破坏性变更
BREAKING CHANGE: API endpoint /auth/login now requires additional parameters

# 关联 Issue
Closes #123
Fixes #456
Refs #789

# 共同作者
Co-authored-by: John Doe <john@example.com>

🤖 CI/CD 流程

自动触发规则

事件 分支 执行动作
push develop 🧪 测试 + 🚀 部署到 Staging
push main 🧪 测试 + 🚀 部署到 Production
pull_request any → develop 🧪 测试 + 🔍 代码检查
pull_request any → main 🧪 测试 + 🔍 代码检查 + 📋 发布检查

Pipeline 阶段

graph LR
    A[Code Push] --> B[Lint & Format]
    B --> C[Unit Tests]
    C --> D[Integration Tests]
    D --> E[Build]
    E --> F[Security Scan]
    F --> G[Deploy]
    G --> H[Health Check]
    H --> I[Notification]

部署策略

  • Staging: 自动部署,快速迭代
  • Production: 自动部署,但需要 PR 审查通过
  • Rollback: 一键回滚到上一个稳定版本

🏗️ 环境说明

环境配置

环境 分支 用途 数据库 缓存 监控
Development feature/* 本地开发 SQLite 本地 Redis 本地日志
Staging develop 测试验证 PostgreSQL Redis Cluster Sentry + 日志
Production main 生产服务 PostgreSQL HA Redis HA Sentry + APM

环境变量

# Staging (.env.staging)
NODE_ENV=staging
API_URL=https://api-staging.echoflow.com
SENTRY_ENVIRONMENT=staging
LOG_LEVEL=debug

# Production (.env.production)
NODE_ENV=production
API_URL=https://api.echoflow.com
SENTRY_ENVIRONMENT=production
LOG_LEVEL=info

👥 代码审查

PR 要求

目标分支 必需审查者 自动检查
develop 1 人 ✅ Tests, ✅ Lint
main 2 人 ✅ Tests, ✅ Lint, ✅ Security

审查清单

  • 功能完整性: 功能是否按需求实现
  • 代码质量: 代码是否清晰、可维护
  • 测试覆盖: 是否有适当的测试用例
  • 性能影响: 是否对性能有负面影响
  • 安全检查: 是否存在安全隐患
  • 文档更新: 是否需要更新文档

PR 模板示例

## 🎯 功能描述

简述此 PR 解决的问题和实现的功能

## 🔧 改动内容

- [ ] 新增音频处理API
- [ ] 优化缓存策略
- [ ] 更新相关文档

## 🧪 测试说明

- [ ] 单元测试通过
- [ ] 集成测试通过
- [ ] 手动测试完成

## 📸 截图/演示

如果是UI相关改动,请提供截图或GIF

## 🔗 相关链接

- Closes #123
- Related to #456

🚀 快速开始

Clone 和设置

# 1. Clone 仓库
git clone https://github.com/your-org/EchoFlow.git
cd EchoFlow

# 2. 设置开发环境
git checkout develop
git pull origin develop

# 3. 安装依赖
# Backend
cd backend && yarn install

# Frontend
cd ../frontend/EchoFlowApp && open EchoFlowApp.xcodeproj

开始新功能

# 1. 从 develop 创建功能分支
git checkout -b feature/your-awesome-feature

# 2. 开发并提交
git add .
git commit -m "feat(scope): your feature description"

# 3. 推送并创建 PR
git push origin feature/your-awesome-feature

📞 支持

如有问题,请:

  1. 检查此文档
  2. 搜索已有 Issues
  3. 在团队频道询问
  4. 创建新的 Issue

Happy Coding! 🎉

posted in EchoFlow 

📌 系统概述

这是一个可持续维护的数据库迁移解决方案,自动化处理schema变更,支持多数据库切换,与开发流程深度集成。

🚀 核心特性

自动化迁移管理

  • 自动检测: 实体变更时自动生成迁移文件
  • 智能分析: 评估迁移风险和时间
  • 安全执行: 生产环境安全迁移流程
  • 一键回滚: 失败时快速恢复

🔄 多数据库支持

  • 无缝切换: SQLite ↔ PostgreSQL ↔ MySQL ↔ MongoDB
  • 零停机: 蓝绿部署迁移策略
  • 数据验证: 自动验证迁移结果

🛠 开发者友好

  • CLI工具: 简单易用的命令行界面
  • Git集成: 提交时自动检查schema变更
  • CI/CD: 部署流水线集成

📚 使用指南

日常开发流程

1. 修改实体后自动处理

# 1. 修改实体文件 (例如: user-audio-settings.entity.ts)
# 2. 自动生成迁移
yarn db:generate

# 3. 查看迁移计划
yarn db:analyze

# 4. 执行迁移
yarn db:migrate

2. 手动管理迁移

# 生成迁移 (指定名称)
yarn db:generate --name add-user-settings

# 模拟执行 (查看会发生什么)
yarn db:migrate --dry-run

# 实际执行
yarn db:migrate

# 回滚
yarn db:rollback

3. 数据库切换

# 切换到 PostgreSQL
yarn db:switch postgres

# 切换到 MySQL  
yarn db:switch mysql

# 模拟切换 (不实际执行)
yarn db:switch postgres --dry-run

4. 生产部署

# 部署前检查
yarn db:pre-deploy

# 生产环境安全迁移
yarn db:migrate --production

# 健康检查
yarn db:health

🎯 实际使用场景

场景1: 添加新字段

// 1. 修改实体
@Entity('user_audio_settings')
export class UserAudioSettingEntity {
  // ... 现有字段
  
  @Column({ type: 'varchar', length: 100, nullable: true })
  newField: string; // 新增字段
}

// 2. 自动生成迁移
// yarn db:generate
// ✅ 迁移文件生成成功: add-new-field-1703123456

// 3. 查看计划
// yarn db:analyze
// 📋 迁移计划:
//   待执行迁移: 1 个
//   预估时间: 30秒  
//   操作类型: 修改表结构
//   风险提示: ⚡ 可能需要数据转换

// 4. 执行迁移
// yarn db:migrate
// ✅ 迁移执行成功

场景2: 数据库切换

// 当前: SQLite
// 目标: PostgreSQL

// 1. 分析当前状态
yarn db:analyze
// 📋 当前数据库: SQLite
//   数据量: 1,245 条记录
//   预估迁移时间: 2分钟

// 2. 切换数据库
yarn db:switch postgres
// 🔄 切换到 postgres 数据库...
// 📦 创建数据备份...
// 🏗 创建目标数据库schema...
// 📊 迁移数据...
// ✅ 数据库切换到 postgres 完成!

// 3. 验证结果
yarn db:health
// ✅ 数据库连接正常
// ✅ 迁移状态正常  
// ✅ 数据一致性检查通过

场景3: 生产部署

# CI/CD 流水线
name: Deploy to Production
on:
  push:
    branches: [main]

jobs:
  deploy:
    steps:
      # ... 其他步骤
      
      - name: 数据库迁移检查
        run: |
          yarn db:pre-deploy
          if [ $? -ne 0 ]; then
            echo "❌ 数据库迁移检查失败,停止部署"
            exit 1
          fi
      
      - name: 执行数据库迁移
        run: yarn db:migrate --production
        
      - name: 健康检查
        run: yarn db:health

📖 命令参考

基础命令

命令 说明 示例
db:analyze 分析迁移需求 yarn db:analyze
db:generate 生成迁移文件 yarn db:generate --name update-schema
db:migrate 执行迁移 yarn db:migrate
db:rollback 回滚迁移 yarn db:rollback --steps 2
db:health 健康检查 yarn db:health

高级命令

命令 说明 示例
db:switch 切换数据库 yarn db:switch postgres
db:pre-deploy 部署前检查 yarn db:pre-deploy
db:migrate --production 生产迁移 yarn db:migrate --production
db:migrate --dry-run 模拟执行 yarn db:migrate --dry-run

🔧 配置说明

数据库配置

// src/config/database.config.ts
export const databaseConfig = {
  type: process.env.DB_TYPE || 'sqlite',
  // SQLite 配置
  database: 'data/echoflow.db',
  // PostgreSQL 配置  
  host: process.env.DB_HOST,
  port: process.env.DB_PORT,
  username: process.env.DB_USERNAME,
  password: process.env.DB_PASSWORD,
};

环境变量

# .env
DB_TYPE=sqlite          # sqlite|postgres|mysql
DB_HOST=localhost       # 数据库主机
DB_PORT=5432           # 数据库端口
DB_USERNAME=postgres   # 用户名
DB_PASSWORD=password   # 密码
DB_NAME=echoflow      # 数据库名

🛡 安全最佳实践

1. 生产环境迁移

  • ✅ 总是先备份数据
  • ✅ 在维护窗口执行
  • ✅ 使用 --production 模式
  • ✅ 验证迁移结果

2. 风险控制

  • ⚠️ 删除操作需人工确认
  • ⚠️ 大数据量分批迁移
  • ⚠️ 保留回滚方案

3. 监控告警

  • 📊 迁移时间监控
  • 📊 数据一致性检查
  • 📊 性能影响评估

🚀 与项目集成

这个迁移系统已经完全集成到EchoFlow项目中:

  1. 自动化: 修改实体→自动生成迁移→安全执行
  2. 可持续: 支持未来所有领域模型变更
  3. 零配置: 开箱即用,无需额外设置
  4. 生产就绪: 经过测试,可在生产环境安全使用

每次添加新的领域模型或修改现有模型时,系统会自动:

  • 🔍 检测变更
  • 📝 生成迁移文件
  • ⚡ 评估风险
  • 🚀 安全执行

这确保了数据库schema与代码始终保持同步,无需手动维护迁移清单! 🎉