本文档涵盖了 AppFlowy 的构建系统、CI/CD 管道和开发工作流。它侧重于支持跨平台开发并在桌面、移动和 Web 平台实现自动化部署的技术基础设施。
有关整体项目结构和技术栈的信息,请参阅项目结构和技术栈。有关具体构建任务和自动化的详细信息,请参阅构建系统和任务编排。
AppFlowy 使用 cargo-make 作为其主要的任务编排工具,为跨多个平台和配置的构建提供统一接口。构建系统协调 Rust 后端编译、Flutter 前端构建以及各种代码生成步骤。
来源: frontend/Makefile.toml1-311 frontend/scripts/makefile/flutter.toml1-332
构建系统支持多种环境配置文件,每种配置文件都为特定的平台和构建要求量身定制
| 环境配置文件 | 平台 | 架构 | 构建类型 | Crate 类型 |
|---|---|---|---|---|
| development-mac-arm64 | macOS | aarch64 | debug | staticlib |
| production-mac-arm64 | macOS | aarch64 | release | staticlib |
| development-windows-x86 | Windows | x86_64 | debug | cdylib |
| production-linux-x86_64 | Linux | x86_64 | release | cdylib |
| development-android | Android | 多架构 | debug | cdylib |
| development-ios-arm64 | iOS | aarch64 | debug | staticlib |
每个环境都配置了关键的构建参数,包括
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
移动端构建由于交叉编译和平台特定的打包而需要额外的复杂性
staticlib crate 类型,需要代码签名和配置文件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
来源: .github/workflows/release.yml1-522
每个平台构建作业都遵循一致的模式,但具有平台特定的差异
cargo make --profile production-windows-x86 appflowycreate-dmg 用于安装程序磁盘映像的工具来源: .github/workflows/release.yml40-463
开发环境需要特定版本的工具和依赖项
来源: .github/workflows/release.yml72-84 .github/workflows/android_ci.yaml.bak148-169
AppFlowy 采用广泛的代码生成技术,以保持 Flutter-Rust 边界的一致性
由 code_generation 任务处理的关键生成任务
来源: frontend/scripts/makefile/flutter.toml301-331
来源: .github/workflows/rust_coverage.yml1-62 .github/workflows/android_ci.yaml.bak185-196
测试基础设施包括
grcov 结合 LLVM 工具进行全面的覆盖率分析测试执行通过 cargo make 任务与构建系统集成,确保开发和 CI 环境中的测试一致性。
来源: .github/workflows/rust_coverage.yml50-61
AppFlowy 遵循语义化版本控制,并在 CHANGELOG.md 中提供详细的发布说明。发布流程会自动提取特定版本的说明以用于 GitHub 发布。
最近的发布模式显示每月定期发布(0.9.0-0.9.3),包含以下功能:
来源: .github/workflows/release.yml24-26 CHANGELOG.md1-899
AppFlowy 通过多种渠道分发
发布管道自动处理签名、公证和多格式打包,以确保跨分发渠道的兼容性。
来源: .github/workflows/release.yml464-489 .github/workflows/release.yml508-521