本文档描述了 Tesseract OCR 项目使用的持续集成和持续部署 (CI/CD) 基础设施。它涵盖了为确保跨多个平台和环境的代码质量所采用的各种 CI 系统、构建配置和测试策略。
有关使用特定构建系统在本地构建 Tesseract 的信息,请参阅 Autoconf/Automake 构建系统、CMake 构建系统 或 Windows 构建。
Tesseract OCR 采用了跨多个平台(Windows、Linux、macOS)、编译器(GCC、Clang、MSVC)和构建系统(Autotools、CMake、SW)的全面 CI/CD 设置。这种基础设施使团队能够快速检测到跨不同环境的构建问题和回归。
该项目使用 GitHub Actions 作为其主要的 CI/CD 平台,并辅以 AppVeyor 对 Windows 构建的支持。大多数工作流程会定期运行(每天或每周),以确保一致的测试,同时节省 CI 资源。
来源:.github/workflows/autotools.yml .github/workflows/cmake.yml .github/workflows/sw.yml appveyor.yml .github/workflows/vcpkg.yml .github/workflows/msys2.yml
GitHub Actions 是 Tesseract OCR 的主要 CI/CD 平台,拥有针对不同构建系统、平台和测试需求的多个专用工作流程。
大多数工作流程按固定计划运行,以节省 CI 资源,同时确保定期测试
| 工作流 | 计划 | 触发器 |
|---|---|---|
| sw.yml | 每 3 天 | 计划运行 |
| cmake.yml | 每日 21:00 UTC | 计划运行 |
| autotools.yml | 每日 20:00 UTC | 计划运行 |
| autotools-macos.yml | 每日 20:00 UTC | 计划运行 |
| unittest.yml | 每日 00:00 UTC | 拉取请求、计划 |
| unittest-macos.yml | 每日 00:00 UTC | 计划运行 |
| unittest-disablelegacy.yml | 每日 10:00 UTC | 计划运行 |
| codeql-analysis.yml | 每周(周二 23:34 UTC) | 推送到 main、拉取请求 |
| vcpkg.yml | 每日 23:00 UTC | 计划运行 |
| msys2.yml | 每日 17:00 UTC | 计划运行 |
| cifuzz.yml | 在拉取请求上 | 拉取请求 |
来源:.github/workflows/sw.yml3-6 .github/workflows/cmake.yml5-7 .github/workflows/autotools.yml5-7 .github/workflows/unittest.yml15-16
SW 构建工作流使用 SW 构建系统,这是一个现代 C++ 包管理器和构建系统。
主要功能
egorpugin/sw-action GitHub Action--skip-tests=lstm,lstm_recode 标志运行测试,以跳过耗时较长的 LSTM 测试来源:.github/workflows/sw.yml8-88
Autotools 工作流使用传统的 GNU 构建系统(configure, make)构建 Tesseract。
主要功能
来源:.github/workflows/autotools.yml8-128
CMake 工作流使用 CMake 构建系统和 Ninja 生成器来构建 Tesseract。
主要功能
来源:.github/workflows/cmake.yml8-151
AppVeyor 为 Windows 构建提供 CI,补充了 GitHub Actions 工作流程。
主要功能
Tesseract 的 CI/CD 管道采用多种测试方法来确保代码质量。
大多数工作流程会运行 Tesseract 的单元测试,这些测试会测试系统的各个组件。
单元测试通常使用
一些工作流程会启用 sanitizers 来运行测试,以捕获内存和未定义行为问题
来源:.github/workflows/unittest.yml20-93
“basicapitest”在大多数工作流程中运行,以测试核心 API 功能
此测试用于测试应用程序用来与 Tesseract 交互的主要 API 入口点。
来源:.github/workflows/cmake.yml129-143 .github/workflows/autotools.yml89-94
许多工作流程使用各种语言模型测试 OCR 功能
这确保了 OCR 功能在各种语言和书写系统中都能正常工作。
来源:.github/workflows/autotools.yml80-87 .github/workflows/cmake.yml120-128
一些工作流程运行性能基准测试以检测性能回归
OpenMP 基准工作流还通过不同的线程限制来测试性能
来源:.github/workflows/autotools.yml96-117 .github/workflows/autotools-openmp.yml52-82
Tesseract 采用两种主要的安全性测试方法
模糊测试工作流程有助于检测可能导致崩溃、内存泄漏或其他未定义行为的输入。
来源:.github/workflows/codeql-analysis.yml1-86 .github/workflows/cifuzz.yml1-34
Tesseract 的 CI/CD 管道测试了各种配置的广泛矩阵
这个全面的测试矩阵确保 Tesseract 在各种环境中都能保持一致。
来源: .github/workflows/autotools.yml11-20 .github/workflows/cmake.yml11-22 .github/workflows/sw.yml8-18 .github/workflows/unittest.yml22-27
Tesseract 的 CI/CD 工作流使用多种触发器来平衡全面的测试和资源的效率。
大多数工作流会按计划(每日或每周)运行,以提供定期的测试,而不会在每次提交时消耗 CI 资源。
有些工作流仅在拉取请求时运行,并带有路径过滤器,仅在相关文件更改时运行。
工作流使用条件步骤根据平台或事件类型调整行为。
这使得计划运行可以进行更全面的测试,同时保持拉取请求检查更快。
来源: .github/workflows/sw.yml30-42 .github/workflows/unittest.yml5-16
Tesseract OCR 采用全面的 CI/CD 基础设施,确保跨多个平台、编译器和构建配置的代码质量。此基础设施包括:
这种强大的 CI/CD 基础设施有助于在各种环境中维护 Tesseract 的质量和兼容性,确保它在各种平台和用例中仍然是一个可靠的 OCR 解决方案。