菜单

CI/CD 流水线与测试

相关源文件

本文档涵盖了 AppFlowy 的持续集成和持续部署 (CI/CD) 流水线、自动化测试框架和构建自动化系统。它重点介绍 GitHub Actions 工作流、测试编排以及 Flutter 前端与 Rust 后端测试环境之间的集成。

有关底层构建系统和任务编排的信息,请参见构建系统和任务编排。有关测试中使用的应用程序初始化和 SDK 设置的详细信息,请参见前端架构和应用程序初始化

CI/CD 管道架构

AppFlowy 使用基于 GitHub Actions 的多平台 CI/CD 系统,针对不同组件和平台设置了独立的工作流。该系统支持并行构建、全面测试以及跨桌面和移动平台的自动化发布。

来源: .github/workflows/flutter_ci.yaml1-366 .github/workflows/rust_ci.yaml1-129 .github/workflows/ios_ci.yaml1-99

GitHub Actions 工作流配置

Flutter CI 流水线

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 流水线

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 测试任务

测试自动化基于 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

云集成测试

AppFlowy 云测试环境

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.gzGitHub Actions 工件压缩的构建输出
.sandbox/测试执行目录隔离的测试环境
lib${LIB_NAME}.${TEST_LIB_EXT}特定于平台的库原生后端库

来源: frontend/scripts/makefile/tests.toml271-347 .github/workflows/flutter_ci.yaml193-199