菜单

CI/CD 流水线

相关源文件

本文档描述了 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 工作流

GitHub Actions 是 Tesseract OCR 的主要 CI/CD 平台,拥有针对不同构建系统、平台和测试需求的多个专用工作流程。

主要构建工作流程

来源:.github/workflows/

调度模式

大多数工作流程按固定计划运行,以节省 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 构建工作流使用 SW 构建系统,这是一个现代 C++ 包管理器和构建系统。

主要功能

  • 在 Windows、macOS 和 Linux(Fedora 容器)上运行
  • 构建调试和发布配置中的静态和共享库
  • 使用 egorpugin/sw-action GitHub Action
  • 使用 --skip-tests=lstm,lstm_recode 标志运行测试,以跳过耗时较长的 LSTM 测试

来源:.github/workflows/sw.yml8-88

Autotools 工作流

Autotools 工作流使用传统的 GNU 构建系统(configure, make)构建 Tesseract。

主要功能

  • 在各种 Ubuntu 版本和多个编译器版本上运行
  • 禁用 OpenMP,侧重于正确性而非性能
  • 构建并测试 Tesseract 主库和训练工具
  • 使用多种语言(英语、印地语、越南语、希伯来语、法语、阿拉伯语)的图像测试 OCR
  • 使用不同的 tessdata 变体(标准、最佳、快速)运行性能基准测试

来源:.github/workflows/autotools.yml8-128

CMake 工作流

CMake 工作流使用 CMake 构建系统和 Ninja 生成器来构建 Tesseract。

主要功能

  • 使用 CMake 和 Ninja 进行快速构建
  • 在 Ubuntu 和 macOS 上使用不同的编译器组合运行
  • 测试不同的语言模型,以确保多语言支持正常工作

来源:.github/workflows/cmake.yml8-151

AppVeyor 配置

AppVeyor 为 Windows 构建提供 CI,补充了 GitHub Actions 工作流程。

主要功能

  • 在 Windows 上使用 Visual Studio 2022 运行
  • 使用 SW 构建系统(类似于 GitHub Actions SW 工作流)
  • 创建包含已构建的可执行文件和 DLL 的工件
  • 以 JUnit 格式上传测试结果
  • 针对相关文件更改进行优化,仅在这些更改发生时运行

来源:appveyor.yml1-48

测试策略

Tesseract 的 CI/CD 管道采用多种测试方法来确保代码质量。

单元测试

大多数工作流程会运行 Tesseract 的单元测试,这些测试会测试系统的各个组件。

单元测试通常使用

一些工作流程会启用 sanitizers 来运行测试,以捕获内存和未定义行为问题

来源:.github/workflows/unittest.yml20-93

API 测试

“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 采用两种主要的安全性测试方法

  1. CodeQL 分析:执行静态代码分析以检测安全漏洞和编码问题
  2. OSS-Fuzz 集成:使用 CIFuzz Action 在拉取请求上运行模糊测试

模糊测试工作流程有助于检测可能导致崩溃、内存泄漏或其他未定义行为的输入。

来源:.github/workflows/codeql-analysis.yml1-86 .github/workflows/cifuzz.yml1-34

构建矩阵策略

Tesseract 的 CI/CD 管道测试了各种配置的广泛矩阵

操作系统

  • Ubuntu 22.04, 24.04
  • macOS(最新版本,ARM/Intel)
  • Windows(Visual Studio 2019, 2022)

编译器

  • GCC(11, 12, 14)
  • Clang/LLVM(15, 18)
  • MSVC(Visual Studio 2019, 2022)

构建选项

  • 静态和共享库
  • OpenMP 启用/禁用
  • 旧版引擎启用/禁用
  • 调试和发布配置

这个全面的测试矩阵确保 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 基础设施,确保跨多个平台、编译器和构建配置的代码质量。此基础设施包括:

  1. 多个 CI 平台:GitHub Actions 和 AppVeyor
  2. 多个构建系统:Autotools、CMake、SW、VCPKG、MSYS2
  3. 多样化的测试方法:单元测试、API 测试、CLI 测试、多语言测试、性能基准测试和安全测试
  4. 广泛的平台支持:Ubuntu、macOS (Intel/ARM) 和 Windows
  5. 全面的构建矩阵:各种编译器、构建选项和配置

这种强大的 CI/CD 基础设施有助于在各种环境中维护 Tesseract 的质量和兼容性,确保它在各种平台和用例中仍然是一个可靠的 OCR 解决方案。

来源: .github/workflows/ appveyor.yml