菜单

开发与部署

相关源文件

本文档涵盖了 AppFlowy 的构建系统、CI/CD 管道和开发工作流。它侧重于支持跨平台开发并在桌面、移动和 Web 平台实现自动化部署的技术基础设施。

有关整体项目结构和技术栈的信息,请参阅项目结构和技术栈。有关具体构建任务和自动化的详细信息,请参阅构建系统和任务编排

构建系统架构

AppFlowy 使用 cargo-make 作为其主要的任务编排工具,为跨多个平台和配置的构建提供统一接口。构建系统协调 Rust 后端编译、Flutter 前端构建以及各种代码生成步骤。

构建系统概述

来源: frontend/Makefile.toml1-311 frontend/scripts/makefile/flutter.toml1-332

环境配置系统

构建系统支持多种环境配置文件,每种配置文件都为特定的平台和构建要求量身定制

环境配置文件平台架构构建类型Crate 类型
development-mac-arm64macOSaarch64debugstaticlib
production-mac-arm64macOSaarch64releasestaticlib
development-windows-x86Windowsx86_64debugcdylib
production-linux-x86_64Linuxx86_64releasecdylib
development-androidAndroid多架构debugcdylib
development-ios-arm64iOSaarch64debugstaticlib

每个环境都配置了关键的构建参数,包括

  • RUST_COMPILE_TARGET: Rust 编译的目标架构
  • CRATE_TYPE: 库类型 (iOS/macOS 使用 staticlib,其他平台使用 cdylib)
  • FLUTTER_DESKTOP_FEATURES: Rust 后端的功能标志
  • BUILD_FLAG: 调试或发布优化级别

来源: frontend/Makefile.toml60-218

跨平台构建过程

桌面端构建工作流

来源: frontend/scripts/makefile/flutter.toml6-41

移动端构建配置

移动端构建由于交叉编译和平台特定的打包而需要额外的复杂性

  • iOS 构建: 使用 staticlib crate 类型,需要代码签名和配置文件
  • Android 构建: 支持多种架构 (arm64-v8a, armeabi-v7a, x86_64),使用 cdylib crate 类型

主要的移动端构建任务

  • appflowy-ios: iOS 应用编译和打包
  • appflowy-android: 支持多架构的 Android APK 生成
  • flutter-build-ios: 针对 iOS 的 Flutter 构建(带混淆)
  • flutter-build-android: 带架构拆分的 Android APK 构建

来源: frontend/scripts/makefile/flutter.toml43-82 frontend/Makefile.toml178-218

CI/CD 管道架构

发布管道概述

来源: .github/workflows/release.yml1-522

特定平台构建作业

每个平台构建作业都遵循一致的模式,但具有平台特定的差异

Windows 构建流程

  1. 环境设置: Flutter 3.27.4, Rust 1.85.0, Visual Studio 构建工具
  2. 构建执行: cargo make --profile production-windows-x86 appflowy
  3. 打包: 创建 ZIP 归档和 Inno Setup 安装程序生成
  4. 资产上传: 将 ZIP 和安装程序 (.exe) 上传至 GitHub 发布页

macOS 构建流程

  1. 通用二进制文件: 针对 Intel (x86_64) 和 Apple Silicon (aarch64) 进行构建
  2. 代码签名: 使用 Apple Developer 证书以符合安全要求
  3. DMG 创建: create-dmg 用于安装程序磁盘映像的工具
  4. 公证: Apple 公证服务用于分发批准

Linux 构建流程

  1. 多格式打包: .tar.gz, .deb, .rpm 和 .AppImage 格式
  2. 系统依赖项: libgtk-3-dev, libssl-dev, 各种构建工具
  3. 包生成: 针对不同发行版的原生包管理器

来源: .github/workflows/release.yml40-463

开发环境设置

前提条件和工具安装

开发环境需要特定版本的工具和依赖项

来源: .github/workflows/release.yml72-84 .github/workflows/android_ci.yaml.bak148-169

代码生成流程

AppFlowy 采用广泛的代码生成技术,以保持 Flutter-Rust 边界的一致性

code_generation 任务处理的关键生成任务

  • Protobuf 编译: 服务定义和数据模型
  • 翻译文件: 国际化键生成
  • FFI 绑定: Dart-Rust 接口生成
  • 构建运行器: 用于序列化的 Flutter 代码生成

来源: frontend/scripts/makefile/flutter.toml301-331

测试与质量保证

测试自动化基础设施

来源: .github/workflows/rust_coverage.yml1-62 .github/workflows/android_ci.yaml.bak185-196

测试配置和覆盖率

测试基础设施包括

  • Rust 覆盖率: 使用 grcov 结合 LLVM 工具进行全面的覆盖率分析
  • 移动端测试: 使用 x86_64 架构的 Android 模拟器进行集成测试
  • 云集成: AppFlowy 云容器用于后端服务测试
  • 跨平台验证: 在 Ubuntu、macOS 和 Windows 上进行矩阵构建

测试执行通过 cargo make 任务与构建系统集成,确保开发和 CI 环境中的测试一致性。

来源: .github/workflows/rust_coverage.yml50-61

发布管理

版本管理和更新日志

AppFlowy 遵循语义化版本控制,并在 CHANGELOG.md 中提供详细的发布说明。发布流程会自动提取特定版本的说明以用于 GitHub 发布。

最近的发布模式显示每月定期发布(0.9.0-0.9.3),包含以下功能:

  • AI 工作区搜索和概述
  • 自定义提示和数据库集成
  • 跨平台 UI 改进
  • 移动端功能对等增强

来源: .github/workflows/release.yml24-26 CHANGELOG.md1-899

分发渠道

AppFlowy 通过多种渠道分发

  • GitHub 发布: 包含平台特定资产的主要分发渠道
  • Docker Hub: 用于自托管的容器镜像
  • 包管理器: 用于 Linux 发行版的 .deb, .rpm, AppImage
  • 应用商店: 通过 iOS App Store 和 Google Play 进行移动端分发

发布管道自动处理签名、公证和多格式打包,以确保跨分发渠道的兼容性。

来源: .github/workflows/release.yml464-489 .github/workflows/release.yml508-521