本文档涵盖了 AppFlowy 的持续集成和持续部署 (CI/CD) 流水线、自动化测试框架和构建自动化系统。它重点介绍 GitHub Actions 工作流、测试编排以及 Flutter 前端与 Rust 后端测试环境之间的集成。
有关底层构建系统和任务编排的信息,请参见构建系统和任务编排。有关测试中使用的应用程序初始化和 SDK 设置的详细信息,请参见前端架构和应用程序初始化。
AppFlowy 使用基于 GitHub Actions 的多平台 CI/CD 系统,针对不同组件和平台设置了独立的工作流。该系统支持并行构建、全面测试以及跨桌面和移动平台的自动化发布。
来源: .github/workflows/flutter_ci.yaml1-366 .github/workflows/rust_ci.yaml1-129 .github/workflows/ios_ci.yaml1-99
在 flutter_ci.yaml 中定义的主要 Flutter CI 流水线编排了跨多个平台的构建和测试,并包含特定的环境配置。
| 环境变量 | 值 | 目的 |
|---|---|---|
FLUTTER_VERSION | "3.27.4" | Flutter SDK 版本 |
RUST_TOOLCHAIN | "1.85.0" | Rust 编译器版本 |
CARGO_MAKE_VERSION | "0.37.18" | 构建自动化工具版本 |
CLOUD_VERSION | "0.9.49-amd64" | AppFlowy Cloud 服务版本 |
来源: .github/workflows/flutter_ci.yaml26-31 .github/workflows/flutter_ci.yaml125-366
Rust CI 流水线侧重于后端测试,包括云集成和代码质量检查。
来源: .github/workflows/rust_ci.yaml25-129 .github/workflows/rust_ci.yaml100-118
AppFlowy 使用集中式测试运行器来管理跨平台的集成测试,解决了 Flutter 在集成测试中的文件切换限制。
来源: frontend/appflowy_flutter/integration_test/runner.dart14-37
测试系统使用不同的集成模式和沙盒环境来实现隔离。
来源: frontend/appflowy_flutter/lib/startup/tasks/rust_sdk.dart70-83
测试自动化基于 cargo-make 任务构建,这些任务处理跨平台编译和测试执行。
| 任务名称 | 平台 | 描述 |
|---|---|---|
dart_unit_test | 跨平台 | 带后端构建的主单元测试运行器 |
dart_unit_test_no_build | 跨平台 | 使用预构建工件的单元测试 |
rust_unit_test | 跨平台 | Rust 后端单元测试 |
build_test_backend | 跨平台 | 测试后端编译 |
flutter_test | 跨平台 | 单个测试文件执行 |
来源: frontend/scripts/makefile/tests.toml11-61 frontend/scripts/makefile/tests.toml210-270
CI 系统包含使用 Docker 容器对 AppFlowy Cloud 服务进行的全面云集成测试。
来源: .github/workflows/flutter_ci.yaml232-340 .github/workflows/rust_ci.yaml64-98
测试系统使用 grcov 对 Rust 代码进行全面的覆盖率收集,并使用 Flutter 内置的覆盖率工具对 Dart 代码进行收集。
来源: frontend/scripts/makefile/tests.toml83-207 .github/workflows/flutter_ci.yaml204-217
测试系统使用 .sandbox 目录进行测试隔离,并通过压缩归档文件管理构建工件。
| 工件类型 | 位置 | 目的 |
|---|---|---|
appflowy_flutter.tar.gz | GitHub Actions 工件 | 压缩的构建输出 |
.sandbox/ | 测试执行目录 | 隔离的测试环境 |
lib${LIB_NAME}.${TEST_LIB_EXT} | 特定于平台的库 | 原生后端库 |
来源: frontend/scripts/makefile/tests.toml271-347 .github/workflows/flutter_ci.yaml193-199